美文网首页
Flutter 生命周期函数

Flutter 生命周期函数

作者: codergzh | 来源:发表于2021-10-14 11:41 被阅读0次

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

    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/
    日常工作和学习中的记录和分享
    如有不对,欢迎各位大佬指导

    相关文章

      网友评论

          本文标题:Flutter 生命周期函数

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