美文网首页
4.Flutter生命周期与路由管理

4.Flutter生命周期与路由管理

作者: Gflyer | 来源:发表于2019-10-23 16:01 被阅读0次

1.Flutter中生命周期:

flutter也有自己的生命周期,不像Android中Application、Activity、Fragment生命周期分得这么明细,flutter中只在StatefulWidget维护的State中维护了5个生命周期函数(可用于App中的页面跳转,相当于Android中View的生命周期)。而Activity中的生命周期可以通过实现WidgetsBindingObserver 接口,在didChangeAppLifecycleState()中获取状态回调。

1.1StatefulWidget:

initState()-->didChangeDependencies()-->deactivate()-->dispose() didUpdateWidge()

  • initState(): 表示当前 State 将和一个 BuildContext 产生关联,但是此时BuildContext
    没有完全装载完成,如果你需要在该方法中获取 BuildContext ,可以 new Future.delayed(const Duration(seconds: 0, (){//context}); 一下。

  • didChangeDependencies(): 在 initState() 之后调用,当 State 对象的依赖关系发生变化时,该方法被调用,初始化时也会调用。

  • deactivate(): 当 State 被暂时从视图树中移除时,会调用这个方法,同时页面切换时,也会调用。页面路由切换的时候push()、pop()都会回调这个函数。

  • dispose(): Widget 销毁了,在调用这个方法之前,总会先调用 deactivate()。

  • didUpdateWidget(): 当 widget 状态发生变化时,会调用。

1.2常见业务场景:

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

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

2.Widget B从Widget A退出: 调用Navigator.pop()

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

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

1.3Activity生命周期和Flutter的对应关系(主要依赖WidgetsBindingObserver 接口):

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

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

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

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

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

5、关于drawframe回调:Vsync信号到来之后,Engin会按顺序回调window的两个回调函数:onBeginFrame()onDrawFrame()。这两个回调是SchedulerBinding初始化的时候设置给window的。对应的是SchedulerBinding.handleBeginFrame()SchedulerBinding.handleDrawFrame()

应用场景:
1、初次打开widget时,不执行AppLifecycleState的回调;

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

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

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

class _TabBarState extends State<TabBarPage> with TickerProviderStateMixin ,WidgetsBindingObserver{
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    // state对应生命周期回调
    print('AsyncSnapshotLifeCycle:' + state.toString());
    super.didChangeAppLifecycleState(state);
  }
}

相关文章

  • 4.Flutter生命周期与路由管理

    1.Flutter中生命周期: flutter也有自己的生命周期,不像Android中Application、Ac...

  • 1.2 页面路由(页面跳转,切换)

    在小程序中所有页面的路由全部由框架进行管理。 路由方式 对于路由的触发方式以及页面生命周期函数如下: 路由方式触发...

  • VUE进阶 - 路由

    路由守卫,元信息,路由权限,动态路由 路由的生命周期函数,每次跳转页面都会触发所有生命周期函数在路由中判断权限的用...

  • Fragment 生命周期学习

    Fragment 生命周期学习管理片段生命周期与管理 Activity 生命周期很相似。和 Activity 一样...

  • Vue1.0学习小结2

    目录 生命周期 计算属性 自定义方法与属性 数据监听 动画 组件 slot 路由 1.生命周期 用Vue框架,熟悉...

  • 王路|B2B市场营销:线索生命周期管理实践(一)

    笔者总结了线索全生命周期管理中的实践经验与思考。 01线索全生命周期管理背景和价值 1. 线索全生命周期管理背景 ...

  • 2018-01-02

    静态路由配置与管理实验报告 ...

  • Flutter基本知识整理笔记

    与iOS开发的异同。例:Widget和UIView,交互等 生命周期,Widget 常用Widget介绍 路由跳转...

  • 关于嵌套路由,子路由生命周期先执行的问题

    嵌套路由生命周期中子级请求先执行,父级请求后执行 1.检查父级路由生命周期中是否用了同步请求,子级路由是否用的异步...

  • 路由守卫

    路由守卫 当导航发生改变的时候,v-router会在不同的地方调用指定的函数,也就是与路由有关的生命周期函数,也称...

网友评论

      本文标题:4.Flutter生命周期与路由管理

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