flutter路由销毁,flutter 路由管理

flutter webwiew销毁时间

在Widget销毁之前将WebView的监听和view销毁掉。

成都创新互联专注于桐乡网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供桐乡营销型网站建设,桐乡网站制作、桐乡网页设计、桐乡网站官网定制、重庆小程序开发服务,打造桐乡网络公司原创品牌,更为您提供桐乡网站排名全网营销落地服务。

flutter生命周期大体上可以分为三个阶段:初始化、状态变化、销毁。

1、初始化阶段

对应执行构造方法和initState时候2、状态变化阶段

开新的widget或者调用setState方法的时候

3、销毁阶段

deactivate和dispose

二、生命周期阶段执行的函数

1、initState调用次数:1次

插入渲染树时调用,只调用一次,widget创建执行的第一个方法,这里可以做一些初始化工作,比如初始化State的变量。2、didChangeDependencies调用次数:多次

初始化时,在initState()之后立刻调用

当依赖的InheritedWidgetrebuild,会触发此接口被调用。实测在组件可见状态变化的时候会调用

3、build调用次数:多次初始化之后开始绘制界面。setState触发的时候会

4、didUpdateWidget调用次数:多次组件状态改变时候调用。

5、deactivate当State对象从树中被移除时,会调用此回调,会在dispose之前调用。页面销毁的时候会依次执行:deactivatedispose

6、dispose调用次数:1次当State对象从树中被永久移除时调用;通常在此回调中释放资源。

7、reassemble在热重载(hotreload)时会被调用,此回调在Release模式下永远不会被调用。

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

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

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

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

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

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

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

flutter 路由监听友盟页面统计方案

1.当我们使用flutter开发的时候 页面里面只有 initState 与dispose方法.

initState 只有进入页面的时候调用,并且在二级页面返回的时候 是不会有调用的

dispose 当页面销毁的时候 才会调用,你进入二级页面是不会调用的

综上分析者两个方法没有办法友盟页面统计分享上报

2.我们可以使用 NavigatorObserver来解决

首先新建一个 继承与NavigatorObserver的类 实现NavigatorObserver 的方法就可以了

最后我们需要再 MaterialApp里面的navigatorObservers添加监听就可以了

这时候 会有一个问题点击tabbar几个主页是没有统计的 ,我们也需要再tabbar的点击方法来进行处理

Flutter里的viewWillAppear

首先要在main.dart文件里创建全局路由监听对象

传入MaterialApp的navigatorObservers属性里

在需要的页面里使用routeObserver加入监听:

1.在该页面的State混入RouteAware

2.重写didChangeDependencies方法加入监听

3.在页面dispose时销毁监听

4.重写需要监听的事件方法

当Push到该页面时:

当Pop到该页面时:

当该页面Push到其他页面时:

当该页面被Pop时:

2022.6.11:

注册监听入参类型有变化

Flutter:State生命周期以及页面重载问题详解

这里需要混入WidgetsBindingObserver,重写didChangeAppLifecycleState方法才能看到app进入前后台的状态

我这边使用的是一个嵌套行页面,主页面(TabBarViewPage)是一个TabBar+TabBarView实现的子页面切换,子页面是三个页面(HomeItemPage,EmailItemPage,MineItemPage)

子页面互相切换的时候下一个页面创建,上一个页面就会被销毁,这是flutter默认的情况,页面会被移除然后重载。当然你也可以设置需要的页面不被重载的页面,这个后面再讲

解决页面重载需要三步

可以看到home并没有被销毁也没有重载,但是mail被销毁了然后重载了

可以看到当主页面销毁的时候,home也是被销毁的


当前标题:flutter路由销毁,flutter 路由管理
网站网址:http://bzwzjz.com/article/phjoed.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 成都品牌网站建设 成都h5网站建设 高端网站设计 网站建设公司 网站建设公司 成都网站制作 重庆电商网站建设 成都网站设计 成都网站制作 网站制作 重庆外贸网站建设 成都网站制作 成都网站制作公司 高端网站设计 企业网站设计 网站制作 成都响应式网站建设公司 成都网站建设公司 成都企业网站建设 温江网站设计 自适应网站建设 手机网站制作