Flutter 生命周期函数

生命周期就是在某个特定的时刻会自动触发的函数。

flutter 生命周期的六个钩子函数大致分为四个阶段:

组件的初始化 → 创建 → 更新 → 卸载

只有我们了解了生命周期的执行顺序,才能清楚的知道我们在那些时刻应该做什么。

代码示例:

class HYHomeContent extends StatefulWidget {
  // 1、执行State类的构造方法
  HYHomeContent() {
    print("1.调用HYHomeContent的constructor方法");
  }

  @override
  _HYHomeContentState createState() {
    print("2.调用HYHomeContent的createState方法");
    return _HYHomeContentState();
  }
}

class _HYHomeContentState extends State<HYHomeContent> {
  int _counter = 0;
  _HYHomeContentState() {
    print("3.调用_HYHomeContentState的constructor方法");
  }

  @override
  void initState() {
    // 2、执行initState,通常会在这个方法中执行一些数据初始化的操作,或者也可能会发送网络请求;  
     // 注意:这个方法是重写父类的方法,必须调用super,因为父类中会进行一些其他操作;
     // 并且如果你阅读源码,你会发现这里有一个注解(annotation):@mustCallSuper
    final TextStyle style = TextStyle();
    super.initState(); // 调用: 这里是必须调用super
    print("4.调用_HYHomeContentState的initState方法");
  }

  @override
  void didUpdateWidget(HYHomeContent oldWidget) {
    super.didUpdateWidget(oldWidget);
    // 执行didUpdateWidget方法是在当父Widget触发重建(rebuild)时,系统会调用didUpdateWidget方法;
    print("didUpdateWidget");
  }
  // 这个方法在两种情况下会调用
  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    // 情况一:调用initState会调用;
    // 情况二:从其他对象中依赖一些数据发生改变时,比如InheritedWidget;
    print("调用_HYHomeContentState的didChangeDependencies方法");
  }

  @override
  Widget build(BuildContext context) {
    print("5.调用_HYHomeContentState的build方法");
    return Column(
      children: <Widget>[
        RaisedButton(
          child: Icon(Icons.add),
          onPressed: () {
            // 手动调用setState方法,会根据最新的状态(数据)来重新调用build方法,构建对应的Widgets;  
            setState(() {
              _counter++;
            });
          },
        ),
        Text("数字:$_counter")
      ],
    );
  }

  @override
  void dispose() {
    // 当前的Widget不再使用时,会调用dispose进行销毁
    print("6.调用_HYHomeContentState的dispose方法");
    super.dispose();
  }
}

个人博客:https://codergzh.gitee.io/
日常工作和学习中的记录和分享
如有不对,欢迎各位大佬指导

posted @ 2021-10-14 11:41  codergzh  阅读(108)  评论(0编辑  收藏  举报