StatelessWidget 只有 createElement
和 build
两个生命周期
所以重点了解下 StatefulWidget
StatefulWidget 的生命周期方法按照时期不同可分为三组:
初始化时期
createState
当构建一个新的
StatefulWidget
会立刻调用并且这个方法必须被覆盖
1 | e.g. |
initState
创建
widget
时调用的除构造方法外的第一方法类似于
Android的:onCreate()
和IOS
的viewDidLoad()
这个方法中通常会做一些初始化工作 比如
channel
的初始化 监听器的初始化等
1 | e.g. |
更新时期
didChangeDependencies
当依赖的
State
对象改变时会调用:在第一次构建
widget
时,在initState()
之后立即调用此方法如果
StatefulWidget
依赖于InheritedWidget
,那么当前的State
所依赖InheritedWidget
中的变量改变的时候会再次调用
1 | e.g. |
bulid
这是一个必须实现的方法 在这里实现你要呈现的页面内容
它会在
didChangeDependencies()
之后立即调用另外当调用
setState
后也会再次调用
1 | e.g. |
didUpdateWidget
是个不常用的组件 当父组件需要重新绘制时才会调用
该方法会携带一个
oldWidget
参数 可以将其与当前的Widget
进行对比 以便执行一些额外的逻辑例如:
if ( oldWidget.xxx != widget.xxx )
1 | e.g. |
销毁时期
deactivate
- 很少使用 在组件被移除时调用 在
dispose()
之前调用
1 | e.g. |
dispose
常用 组件被销毁时调用:
通常在该方法中执行一些资源的释放工作
比如 监听器的卸载
channel
的销毁等
1 | e.g. |