Flutter Widget页面生命周期,Flutter 应用的生命周期

Flutter Widget页面生命周期:

StatelessWidget 只有createElement,build两个生命周期方法。
StatefullWidget 的生命周期按照时期不同,分为三组:

1. 初始化时期:createState、initState

- createState: 当创建一个新的StatefullWidget时,会立即调用,该方法必须被覆盖。
- initState:    创建widget调用的除构造方法外的第一个方法。类似Android的onCreate与iOS的viewDidLoad
    通常做一些初始化工作,比如channel的初始化,监听器的初始化等。

2. 更新时期:didChangeDependencies、build、didUpdateWidget

- didChangeDependencies():当依赖的State对象改变时会调用:
    a:在第一次构建widget时,在initState()之后立即调用此方法;
    b:如果StatefulWidget依赖于InhertedWidget,那么当当前State所依赖的InhertedWidget的变量改变时调用。
    /// 拓展:InhertedWidget可高效率的将数据在Widget树中向下传递,共享。
- build():这是一个必须要实现的方法,这里实现要呈现的页面内容。
    a:在didChangeDependencies()之后立即调用;
    b:另外当调用setState后也会再次调用该方法刷新UI。
- didUpdateWidget(WidgetLifecycle oldWidget):
    当父组件需要重绘的时候调用,是一个不常用的生命周期方法。
    /// if(oldWidget.xxx != widget.xxx)...

3. 销毁期:deactivete、dispose

- deactivete(): 不常用的生命周期方法。在组件被移除时调用,且是在dispose之前调用。
- dispose(): 组件被销毁时调用,一般用于执行资源的释放工作(监听器卸载、channel的销毁等)。

打开页面:依次调用initState --> didChangeDependencies --> build方法。
销毁页面:依次调用deactivete --> dispose方法。

Flutter 应用的生命周期:

WidgetsBindingObserver:是一个Widgets绑定观察器,通常可以监听应用的生命周期,语言的变化等。

class AppLifecycle extends StatefulWidget {
  const AppLifecycle({Key? key}) : super(key: key);

  @override
  State createState() => _AppLifecycleState();
}

/// 如何获取Flutter应用维度的生命周期。
/// WidgetsBindingObserver:是一个Widgets绑定观察器,通常可以监听应用的生命周期,语言的变化等。
class _AppLifecycleState extends State with WidgetsBindingObserver {
  @override
  void initState() {
    // 添加监听器。生命周期变化,会回调到didChangeAppLifecycleState方法。
    WidgetsBinding.instance.addObserver(this);
    super.initState();
  }
  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Flutter应用维度的生命周期')),
      body: Container(child: Text('应用维度的生命周期')),
    );
  }

  // 监听应用维度的生命周期变化。
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);
    print('state = $state');
    if (state == AppLifecycleState.paused) {
      print("app进入后台:paused");
    } else if (state == AppLifecycleState.resumed) {
      print("app进入前台:resumed");
    } else if (state == AppLifecycleState.inactive) {
      // 不常用:应用程序处于非活动状态,并且为接收用户输入时调用,比如:来电话了。
      print("app inactive");
    // } else if (state == AppLifecycleState.suspending) {
    //   // 不常用:应用程序被挂起时调用,它不会在iOS上触发。只在Android上触发
    //   print("app suspending");
    }
  }

}

你可能感兴趣的:(Flutter Widget页面生命周期,Flutter 应用的生命周期)