深色模式
Flutter之State生命周期
上图
说明
createState
该函数为
StatefulWidget
中创建State
的方法,当StatefulWidget
被调用时会立即执行createState
。initState
该函数为
State
初始化调用,因此可以在此期间执行State
各变量的初始赋值,同时也可以在此期间与服务端交互,获取服务端数据后调用setState
来设置State。
didChangeDependencies
当
State
对象的依赖发生变化时会被调用;例如:在之前build()
中包含了一个InheritedWidget
,然后在之后的build()
中InheritedWidget
发生了变化,那么此时InheritedWidget
的子widget的didChangeDependencies()
回调都会被调用。典型的场景是当系统语言Locale
或应用主题改变时,Flutter framework会通知widget调用此回调。build
主要是返回需要渲染的
Widget
,由于build
会被调用多次,因此在该函数中只能做返回Widget
相关逻辑,避免因为执行多次导致状态异常。在build
之后还有个回调addPostFrameCallback
,在当前帧绘制完成后会回调,注册之后不能被解注册并且只会回调一次;addPostFrameCallback
是SchedulerBinding
的方法;由于mixin WidgetsBinding on SchedulerBinding
,所以添加这个回调有两种方式:SchedulerBinding.instance.addPostFrameCallback((_) => {});
或者WidgetsBinding.instance.addPostFrameCallback((_) => {});
reassemble
在 debug 模式下,每次热重载都会调用该函数,因此在 debug 阶段可以在此期间增加一些 debug 代码,来检查代码问题。
didUpdateWidget
在
widget
重新构建时,Flutter framework会调用Widget.canUpdate
来检测Widget
树中同一位置的新旧节点,然后决定是否需要更新,如果Widget.canUpdate
返回true
则会调用此回调。正如之前所述,Widget.canUpdate
会在新旧widget
的key
和runtimeType
同时相等时会返回true
,也就是说在在新旧Widget
的key
和runtimeType
同时相等时didUpdateWidget()
就会被调用。父组件发生build
的情况下,子组件该方法才会被调用,其次该方法调用之后一定会再调用本组件中的build
方法。deactivate
在组件被移除节点后会被调用,如果该组件被移除节点,然后未被插入到其他节点时,则会继续调用
dispose
永久移除。dispose
永久移除组件,并释放组件资源。