这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战。
在iOS开发中,我们都知道控制器的生命周期
,从出现到消失。在flutter
中我们的widget
的生命周期是怎么样的,一起学习下。
1. Widget生命周期的基本概念
- 生命周期
生命周期是从创建到销毁
的过程,实际使用中就是各种回调方法(函数调用)。 目的就是为了让我们知道封装好的Widget处于什么样的状态
。
- 作用
我们通过监听Widget的生命周期
,做出对应的操作,比如initState
初始化数据:创建数据或者发送网络请求。dispose
的时候内存管理,销毁数据,监听者或者Timer等。
2. Widget的生命周期
2.1 StatelessWidget
对于StatelessWidget
来说没有状态,因此只有
- 初始化
init
build创建
(每次页面绘制会调用build)
2.2 StatefulWidget
init初始化
createState
createState
是创建Widget的state
的时候创建的,这个方法只调用一次
state的init
我们创建State
的时候会执行初始化方法,只会执行一次
initState()
initState
在创建state
的时候调用,只会执行一次
,通常我们会在这里做些数据方面的处理或者一些初始化操作
,此时view还没有加载
,类似我们的viewDidload
。
didChangeDependencies
didChangeDependencies
在initState
后立即调用,之后在StatefulWidget
依赖的InheritedWidget
发生变化后,didChangeDependencies
才会调用,因此didChangeDependencies
可以多次被调用。后面我们会介绍InheritedWidget
:数据共享
build
build是绘制页面的时候调用
,初始化的时候在didChangeDependencies后调用
,我们主动调用setState()
的时候会重新调用build
方法进行绘制页面渲染,通常我们在build
主要是创建widget
,调用其他方法会影响渲染效率
。
addPostFrameCallback
addPostFrameCallback
是在渲染结束
都进行调用,一般是在initState
中调用,只会调用一次。
didUpdateWidget
组件更新
的时候会进行调用,通常widget初始化
后会调用一次
deactivate
移除组件
的时候调用
dispose
当Widget销毁
的时候,调用State dispose
,我们一般在dispose
做一些取消监听,销毁定时器,动画等操作。和init State
相对使用