美文网首页
Flutter - 生命周期-

Flutter - 生命周期-

作者: tp夕阳武士 | 来源:发表于2020-09-23 10:47 被阅读0次

    1.StatefulWidget生命周期

    Flutter小部件的生命周期:

    • StatelessWidget可以由父Widget直接传入值,调用build方法来构建,整个过程非常简单;
    • 而StatefulWidget需要通过State来管理其数据,并且还要监控状态的改变决定是否重新build整个Widget;
    • 所以,我们主要讨论StatefulWidget的生命周期,也就是它从创建到销毁的整个过程;


      flutter生命周期.jpg
    1. Widget的构造

    在flutter中,State是依赖于Widget的,所以,在使用State的时候,先会有一个Widget的构造,且Widget是继承于StatefulWidget

    class PRHomeContent extends StatefulWidget {
    
      final String msg;
      // 如果Widget没有增加属性的时候,这个默认构造方法是不用写的.
      // 系统会帮我们补充构造方法;
      PRHomeContent(this.msg) {
        print('1.调用 ${this.runtimeType} -> Contstructor ');
      }
    
    
     //Widget 构造完成后,接着就会创建 State;
      @override
      _RFHomeContentState createState() {
        print('2.调用 ${this.runtimeType} -> createState ');
        return _RFHomeContentState();
      }
    }
    
    
    2. Widget create State (Widget创建state)

    Widget 构造完成后,接着就会创建 State,代码在上方.

    3. State初始化
    4. State initState (State初始化)
    5. State didChangeDependencies (State 依赖变化)
    6. State didUpdateWidget
    7. State dispose(销毁)
    class _RFHomeContentState extends State<PRHomeContent> {
      //构造方法
      _RFHomeContentState() {
        print('3.调用 ${this.runtimeType} -> constuctor ');
      }
    
      //注意点: super.initState(); 是必须调用的
      /* 源码:
      @mustCallSuper  ---> 必须调用
      void initState() {
        assert(_debugLifecycleState == _StateLifecycle.created);
      }
      */
      //初始化方法;
      @override
      void initState() {
        // TODO: implement initState
        super.initState();
        print('4.调用 ${this.runtimeType} -> initState ');
      }
    
      int _count = 0;
      int _count2 = 0;
      int _count3 = 0;
    
      //点击btn 会重新调用这个build方法
      @override
      Widget build(BuildContext context) {
        print('5.调用 ${this.runtimeType} -> build ');
        _count3 = _count > _count2 ? _count : _count2;
    
        return Column(
          children: [
            Text(this.widget.msg),
            Text('计数器:$_count3'),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                RaisedButton(
                  onPressed: () {
                    setState(() {
                      _count++;
                    });
                  },
                  child: Icon(Icons.add),
                  color: Colors.pink,
                ),
                RaisedButton(
                  onPressed: () {
                    setState(() {
                      _count2++;
                    });
                  },
                  child: Icon(Icons.add),
                  color: Colors.pink,
                ),
              ],
            )
          ],
        );
      }
    
      //销毁方法
      @override
      void dispose() {
        print('6.调用 ${this.runtimeType} -> dispose');
    
        super.dispose();
      }
    
      //当一来发生改变的时候,会调用此方法
      @override
      void didChangeDependencies() {
        // TODO: implement didChangeDependencies
        super.didChangeDependencies();
        print(' ${this.runtimeType} 调用 didChangeDependencies');
      }
    
      //如果当前state所在的Widget结构发生变化的时候,会调用此方法
      //例如 当前state是继承于PRHomeContent的,如果PRHomeContent的结构发生改变的时候,这个state 就会调用didUpdateWidget方法;
      @override
      void didUpdateWidget(PRHomeContent oldWidget) {
        // TODO: implement didUpdateWidget
        super.didUpdateWidget(oldWidget);
        print(' ${this.runtimeType} 调用 didUpdateWidget');
      }
    }
    

    相关文章

      网友评论

          本文标题:Flutter - 生命周期-

          本文链接:https://www.haomeiwen.com/subject/fpmnyktx.html