美文网首页
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