前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flutter —生命周期

Flutter —生命周期

原创
作者头像
CatEatFish
修改2020-07-09 14:24:31
1.3K0
修改2020-07-09 14:24:31
举报
文章被收录于专栏:干活分享干活分享

##Flutter 中的生命周期

flutter 也有自己的生命周期,但跟 Android 比起来就显得弱化了,官方定义的生命周期只有五个,实际应用中还需要WidgetsBindingObserver接口的配合,才能像android中那样 “为所欲为”。

  • initState() 表示当前 State 将和一个 BuildContext 产生关联,但是此时BuildContext 没有完全装载完成,如果你需要在该方法中获取 BuildContext ,可以 new Future.delayed(const Duration(seconds: 0, (){//context}); 一下。
  • didChangeDependencies() 在 initState() 之后调用,当 State 对象的依赖关系发生变化时,该方法被调用,初始化时也会调用。
  • deactivate() 当 State 被暂时从视图树中移除时,会调用这个方法,同时页面切换时,也会调用。
  • dispose() Widget 销毁了,在调用这个方法之前,总会先调用 deactivate()。
  • didUpdateWidge 当 widget 状态发生变化时,会调用。
flutter - 生命周期
flutter - 生命周期
常见业务场景:

1.Widget A打开Widget B: 调用 Navigator.push(B)

  • B构造函数--->B initState--->B didChangeDependencies--->B build--->A deactivate--->A didChangeDependencies.

2.Widget B退出: Navigator.pop

  • A deactivate--->A didChangeDependencies--->A build--->B deactivate--->B dispose

可以看出, Flutter打开、关闭Widget时跟安卓、iOS的时序一样, 都是先处理即将显示的界面。

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

Flutter提供了WidgetsBindingObserver来监听AppLifecycleState, 而AppLifecycleState有4种状态:

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

2、inactive界面退到后台或弹出对话框情况下, 即失去了焦点但仍可以执行drawframe回调;同安卓的onPause;

3、paused应用挂起,比如退到后台,失去了焦点且不会收到 drawframe 回调;同安卓的onStop;

4、suspending, iOS中没用,安卓里就是挂起,不会再执行 drawframe 回调;

下面是生命周期:

1、初次打开widget时,不执行AppLifecycleState的回调;

2、按home键或Power键, AppLifecycleState inactive---->AppLifecycleState pause

3、从后台到前台:AppLifecycleState inactive--->ApplifecycleState resumed

4、back键退出应用: AppLifecycleState inactive--->AppLifecycleState paused

代码语言:txt
复制
class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {
  AppLifecycleState _lastLifecycleState;
 
  void dispose() {
    super.dispose();
    WidgetsBinding.instance.removeObserver(this);
  }
 
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }
 
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    print(state);
  }
 
  ...
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常见业务场景:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档