深色模式
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永久移除组件,并释放组件资源。
