flutter数据销毁,flutter销毁页面

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

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

创新互联公司专业为企业提供静海网站建设、静海做网站、静海网站设计、静海网站制作等企业网站建设、网页设计与制作、静海企业网站模板建站服务,十多年静海做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

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

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

解决页面重载需要三步

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

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

Flutter StatelessWidget和StatefulWidget生命周期

打印结果为

1、widget的 构造方法

2、widget的 createState 方法

3、state的 构造方法

4、state的 initState 方法,(重写该方法时,必须要先调用 super. initState() )

5、 didChangeDependencies方法 ,分两种情况:

(5.1)、调用 initState 方法后,会调用该方法,

(5.2)、从其他 widget 中依赖一些 数据发生改变 时,比如用 InheritedWidget , provider 来监听数据的改变)

6、state的 build方法 (当调用 setState 方法,会重新调用 build 进行渲染)

7、state的 deactivate 方法(当state被暂时从视图移除的时候会调用,页面 push 走、 pop 回来的时候都会调用。因为push、pop会改变widget在视图树位置,需要先移除再添加。重写该方法时,必须要先调用 super.deactivate() )

8、state的 dispose 方法。页面被销毁的时候调用,如: pop 操作。通常情况下,自己的释放逻辑放在 super.dispose() 之前,先操作子类在操作父类。

第十六章:Flutter数据存储

Flutter的数据存储分为三类

Preference相当于iOS的NSUserDefaults,其实也是按plist的方式存储的

step1:添加依赖

step2:pub get

step3:导入头文件

在path_provider中有三个获取文件路径的方法:

- getTemporaryDirectory()

://获取应用缓存目录,等同iOS的NSTemporaryDirectory()和Android的getCacheDir() 方法。

- getApplicationDocumentsDirectory():

//获取应用文件目录类似于iOS的NSDocumentDirectory和Android上的 AppData目录。

step1:添加依赖

step2:pub get

step3:导入头文件

Flutter生命周期

生命周期是一个从创建到销毁的过程,Flutter生命周期分为两部分:

1.Widget的生命周期

2.APP的生命周期

1.StatelessWidget

对于StatelessWidget来说,生命周期只有build过程。build是用来创建Widget的,在每次页面刷新时会调用build。

2.StatefulWidget

StatefulWidget的生命周期依次为:

createState是StatefulWidget来创建State的方法,只调用一次,

initState是StatefulWidget创建后调用的第一个方法,而且只执行一次。在执行initState时,View没有渲染,但是StatefulWidget 已经被加载到渲染树里了,这事的StatefulWidget的 mount 的值会变为true,知道dispose才会变为false.一般我们把初始化的一些操作都放在initState中。

didChangeDependencies会在initState后立即调用,之后只有当StatefulWidget依赖的InheritedWidget发生变化之后,didChangeDependencies才会调用,所以didChangeDependencies可以调用多次。

build方法会在didChangeDeoendencies之后立即调用,在之后setState()刷新时,会重新调用build绘制页面,所以build方法可以调用多次。但一般不再build中创建除创建Widget的方法,否则会影响渲染效率。

addPostFrameCallback是StatefulWidget渲染结束之后的回调,只会调用一次,一般是在initState里添加回调:,

一般在dispose中做一些取消监听、动画的操作,和initState相对使用。

AppLifecycleState就是App的生命周期,包含四个:

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模式下永远不会被调用。


当前文章:flutter数据销毁,flutter销毁页面
本文地址:http://ybzwz.com/article/phgepd.html