Flutter的Widget生命周期的探讨

685 阅读1分钟

生命周期是什么?

生命周期的本质是回调方法。widget的生命周期是通过系统封装的回调方法来告诉我们它正处于什么状态下,而我们就是通过实现回调方法去做监听widget的事件、初始化数据、内存管理等事情。

常用的回调方法有哪些?

Flutter里Widget分为StatelessWidget和StatefulWidget,我们分别来看他们的回调方法有哪些。

  • StatelessWidget(Widget)

      1、构造方法
    DiscoverChildPage({this.title}){
        print('构造方法被调用了');
     }
      2、build方法
    @override
    Widget build(BuildContext context) {
      print('build方法被调用了');
      return Container();
    }
    

在AS上执行Flutter项目时我们会发现在刚启动和hot restart时这俩个方法会执行俩遍,但当我hot reload时,只会执行一遍。这是为什么呢? 在网上搜了好久也没找到答案,最后我在Xcode上又执行了这个项目,发现只执行了一遍,看来这是AS在Debug模式下的问题,所以大家以后遇到这个问题就别在纠结了。

  • StatefulWidget(Widget、State)

      1MinePage() {
      print('构造涵数被调用了!');
      }
      2_MinePageState() {
      print('State构造方法来了!');
      }
      3@override
      void initState() {
      // TODO: implement initState
      super.initState();
      print('State的init来了!');
      }
      4//改变依赖关系时调用
      @override
      void didChangeDependencies() {
      // TODO: implement didChangeDependencies
      super.didChangeDependencies();
       }
      5@override
      Widget build(BuildContext context) {
      print('State的build来了!');
      return Container();
      }
      6//当state从渲染树中移出的时候就会调用,即将销毁!
      @override
      void deactivate() {
      // TODO: implement deactivate
       super.deactivate();
      }
      7@override
      void dispose() {
      // TODO: implement dispose
      super.dispose();
      print('State的dispose!');
      }
    

先调用Widget的构造方法,再调用State的构造方法,再调用init方法,接着是build方法,当销毁时候会调用dispose方法。其中build方法会多交调用,用来刷新界面。