State组件生命周期

/**

  • 初始化:
    State初始化时会依次执行 : 构造函数 > initState > didChangeDependencies > build , 此时页面加载完成。
    改变状态:
    调用setState后,会调用build()方法;而Hot-reload时候会调用didUpdateWidget()和build()
    组件移除:
    组件移除,例如页面销毁的时候会依次执行:deactivate > dispose
    */
class StateLifeCycleState extends State<StateLifeCycle> {
  /**
   * 最先被执行
   */
  StateLifeCycleState() {
    print("!!!!!!!!!!!!!!!!!!!!!!   初始化");
    print("!!!!!!!!!!!   构造函数");
  }

  /**
   * 当组件插入渲染树的时候调用此方法,在生命周期中只会调用一次,可以做一些初始化工作
   */
  @override
  void initState() {
    super.initState();
    print("!!!!!!!!!!!   initState()");
  }

  /**
   *state依赖的对象发生变化时调用
   */
  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    print("!!!!!!!!!!!   didChangeDependencies()");
  }

  /**
   * 当 widget 的配置发生变化时,会调用这个函数,比如调用了setState或者Hot-reload 的时候就会调用这个函数
   * 这个函数调用后,会调用 build()。
   */
  @override
  void didUpdateWidget(StateLifeCycle oldWidget) {
    super.didUpdateWidget(oldWidget);
    print("!!!!!!!!!!!   didUpdateWidget()");
  }

  /**
   * 构建Widget时调用
   */
  var str = "Flutter";

  @override
  Widget build(BuildContext context) {
    print("!!!!!!!!!!!   build()");
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("组件State生命周期"),),
        body: Column(
          children: <Widget>[
            Text(str),
            RaisedButton(
              child: Text("改变状态"),
              onPressed: () {
                print("!!!!!!!!!!!!!!!!!!!!!!   改变状态");
                setState(() {
                  str = "Hello Flutter";
                });
              },
            ),
            RaisedButton(
              child: Text("杀掉页面"),
              onPressed: () {
                print("!!!!!!!!!!!!!!!!!!!!!!   组件移除");
                Navigator.pop(context);
              },
            ),
          ],
        ),
      ),
    );
  }

  /**
   * 当 State 被暂时从视图树中移除时,会调用这个函数。
      页面切换时,也会调用它,因为此时 State 在视图树中的位置发生了变化,需要先暂时移除后添加。
      重写的时候必须要调用 super.deactivate()。
   */
  @override
  void deactivate() {
    super.deactivate();
    print("!!!!!!!!!!!   deactivate()");
  }

  /**
   * 当 State 被永久的从视图树中移除,Framework 会调用该函数。
   * 在调用这个函数之前,总会先调用 deactivate()。
      重写的时候必须要调用 super.dispose()。
   */
  @override
  void dispose() {
    super.dispose();
    print("!!!!!!!!!!!   dispose()");
  }
}
05-20 17:07:41.321 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!!!!!!!!!!!!!   初始化
05-20 17:07:41.322 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!!   构造函数
05-20 17:07:41.322 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!!   initState()
05-20 17:07:41.322 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!!   didChangeDependencies()
05-20 17:07:41.326 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!!   build()
05-20 17:07:51.684 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!!!!!!!!!!!!!   改变状态
05-20 17:07:51.694 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!!   build()
05-20 17:07:59.520 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!!!!!!!!!!!!!   组件移除
05-20 17:07:59.852 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!!   deactivate()
05-20 17:07:59.868 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!!   dispose()

码云地址:https://gitee.com/xgljh/Flutter.git

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容