flutter

State组件生命周期

2019-05-20  本文已影响2人  习惯了_就好

/**

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()

上一篇 下一篇

猜你喜欢

热点阅读