美文网首页
Flutter生命周期

Flutter生命周期

作者: knyou | 来源:发表于2021-01-09 11:05 被阅读0次
State 生命周期
方法名 功能 调用时机 调用次数
构造方法 接收父Widget传递的初始化UI配置数据 创建State时 1
initState 与渲染相关的初始化工作 在State被插入视图树时 1
didChangeDependencies 处理State队形依赖关系变化 initState后及State对象依赖关系变化时 >= 1
build 构建视图 State准备好数据需要渲染时 >= 1
setState 触发视图重建 需要刷新UI时 >= 1
didUpdateWidget 处理Widget的配置变化 父Widget setState触发子Widget重建时 >= 1
deactivate 组件被移除 组件不可视 >= 1
dispose 组件被销毁 组件被永久移除 1

activity生命周期和Flutter对应关系:

在原生 Android、iOS 开发中,有时需要在对应的 App 生命周期事件中做相应处理,比如 App 从后台进入前台、从前台退到后台,或是在 UI 绘制完成后做一些处理。

在原生开发中,可以通过重写 Activity、ViewController 生命周期回调方法,或是注册应用程序的相关通知,来监听 App 的生命周期并做相应的处理。而在 Flutter 中,我们可以利用 WidgetsBindingObserver 类,来实现同样的需求。

Flutter提供了WidgetsBindingObserver来监听AppLifecycleState, 而AppLifecycleState常用的状态有:

  1. resumed 界面可见, 同安卓的onResume。

  2. inactive界面退到后台或弹出对话框情况下, 同安卓的onPause;

  3. paused应用挂起,比如退到后台,同安卓的onStop;

class TestState extends State with WidgetsBindingObserver {
  ... 
  @override
  @mustCallSuper
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this); // 注册监听器
  }
  
  @override
  @mustCallSuper
  void dispose() {
    super.dispose();
    WidgetsBinding.instance.removeObserver(this); // 移除监听器
  }
  
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) async {
    print("$state");
    if (state == AppLifecycleState.resumed) {
      // do sth
    }
  }
}

相关文章

网友评论

      本文标题:Flutter生命周期

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