Flutter中StatefulWidget页面生命周期

记录一下flutter中【StatefulWidget】的生命周期学习内容,核心分为一下三组

1. 初始化时期 createState 和 initState
2. 更新时期 didChangeDependencies 、build 、didUpdateWidget
3. 销毁时期 deactivate 和 dispose

import 'package:flutter/material.dart';
/**
flutter widget的生命周期 重点讲解【StatefulWidget】的生命周期
因为无状态的widget的生命周期方只有 createElement 和 build两个生命周期方法
【StatefulWidget】的生命周期方法按照时期不同可以分为三组
    1.初始化时期 createState 和 initState
    2.更新时期 didChangeDependencies 、build 、didUpdateWidget
    3.销毁时期 deactivate 和 dispose
    扩展阅读:
    http://www.devio.org/io/flutter_app/img/blog/flutter-widget-lifecycle.png
    https://flutterbyexample.com/stateful-widget-lifecycle/
*/

class FlutterWidgetLifeCycle extends StatefulWidget {
  ///当我们构建一个新的StatefulWidget时,这个会立即调用
  ///并且这个方法必须被覆盖
  @override
  _FlutterWidgetLifeCycleState createState() => _FlutterWidgetLifeCycleState();
}

class _FlutterWidgetLifeCycleState extends State {
  int _count = 0;

  ///这是创建widget时候调用的,除构造方法外的第一个方法
  ///类似于iOS的viewDidLoad()
  ///在这个方法中通常会做一些初始化工作,比如channel的初始化,监听器的初始化等
  @override
  void initState() {
    print('-----initState-----');
    super.initState();
  }

  ///当以来的State对象改变时会调用
  @override
  void didChangeDependencies() {
    print('------didChangeDependencies-------');
    super.didChangeDependencies();
  }

  ///这是一个必须实现的方法,在这里实现你要成仙的页面内容
  ///它会在 didChangeDependencies 方法之后立即调用;
  ///另外当调用 setState() 后也会再次调用该build方法;
  @override
  Widget build(BuildContext context) {
    print('------build------');
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter页面生命周期'),
        leading: BackButton(),
      ),
      body: Center(
        child: Column(
          children: [
            RaisedButton(
              onPressed: () {
                setState(() {
                  _count += 1;
                });
              },
              child: Text(
                '点我',
                style: TextStyle(fontSize: 20),
              ),
            ),
            Text(_count.toString()),
          ],
        ),
      ),
    );
  }

  ///这是一个不常用到的生命周期方法,当父组件需要重新绘制时才会调用;
  @override
  void didUpdateWidget(FlutterWidgetLifeCycle oldWidget) {
    print('-------didUpdateWidget-----');
    super.didUpdateWidget(oldWidget);
  }

  ///很少使用,在组件被移除时候调用,在dispose之前调用
  @override
  void deactivate() {
    print('--------deactivate----------');
    super.deactivate();
  }

  ///常用,组件被销毁时候调用;
  ///通常在该方法中执行一些资源的释放工作,比如监听器的移除,channel的销毁等;
  @override
  void dispose() {
    print('--------dispose---------');
    super.dispose();
  }
}

控制台输出结果如下:

flutter: -----initState-----
flutter: ------didChangeDependencies-------
flutter: ------build------
flutter: ------build------
flutter: ------build------
flutter: --------deactivate----------
flutter: --------dispose---------

总结:这几个方法中,最常用的是initStatebuilddispose这三个方法。

你可能感兴趣的:(Flutter中StatefulWidget页面生命周期)