美文网首页flutter
State组件生命周期

State组件生命周期

作者: 习惯了_就好 | 来源:发表于2019-05-20 17:17 被阅读2次

/**

  • 初始化:
    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()

相关文章

  • react随记4 State&生命周期

    State&生命周期 React中组件生命周期如下图: 从上图中也可以看出,组件在构造函数中有state,也就是状...

  • React生命周期

    组件的生命周期 在组件的整个生命周期中,随着该组件的props或者state发生改变,其DOM表现也会有相应的变化...

  • React中函数组件与类组件区别

    类组件 有this、有生命周期、有状态state 使用时需要实例化 函数组件 没有this、没有生命周期、没有状态...

  • 2018-06-11 RN组件的生命周期

    主题:组件的生命周期 RN组件的props和state 1.属性(props) 它是组件的不可变属性(组件自己不可...

  • React 组件渲染过程---自用

    组件的生命周期 getDefaultProps : 初始化propsconstructor:可以初始化state ...

  • RN:组件

    目录一. 什么是组件二. 组件的props、state属性和普通属性三. 组件的生命周期四. 组件之间的通信方式 ...

  • React Hook

    React 声明组件的方式 Class声明和函数式声明(无状态组件)。Class声明可以操作state、生命周期等...

  • State组件生命周期

    /** 初始化:State初始化时会依次执行 : 构造函数 > initState > didChangeDepe...

  • 今日总结

    1.函数组件与类组件的区别? 函数组件:没有实例, 没有生命周期,没有state,只能接收props类组件:有实例...

  • StatefulWidget

    StatefulWidget渲染流程: State生命周期: //初始化 (调用1次,组件创建时) void in...

网友评论

    本文标题:State组件生命周期

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