flutter 生命周期分为三个阶段
初始化时:
StatefulWidget的构造函数 -> createState(创建state类)-> state的构造函数->initState -> didChangeDependencies -> build
createState:在widget中创建state类时调研,只执行一次
didChangeDependencies:两种情况下执行,
1:在页面初始化时执行一次,
2:在依赖的InheritedWidget 发生变化的时候执行
状态变化:
子组件调用setState ->build
父组件调用setState -> 父组件build -> 子组件 didUpdateWidget (子组件被复用)-> 子组件 build
每一帧渲染之后可以添加监听:
addPostFrameCallback:每一帧渲染完之后调用,类似于nextTick,注册一次,调用一次
addPersistentFrameCallback:每一帧渲染完之后调用,注册一次,多次调用,可以用来实现fps,注意:必须在页面渲染出来之后调用,不然会报错
WidgetsBinding.instance?.addPostFrameCallback((time) {
WidgetsBinding.instance?.addPersistentFrameCallback((time2) {
print('------');
print(time2);
//触发一帧的绘制
WidgetsBinding.instance?.scheduleFrame();
});
});
组件销毁时:
deactivate -> dispose
deactivate:当组件被移除组件树时调用,如果接下来这个组件没有被插入组件树就会调用dispose
dispose:组件移除组件树,并且当前组件不再被插入组件树
生命周期中几个重要的属性
mounted:state类中的一个属性,用于表示当前组件是否还在组件树种,createState之后,initState之前,被设置为true,调用dispose时,被设置为false。
dirty: 标识当前组件为脏状态,下一帧时会调用build进行重新渲染,调用 setState 方法或者执行 didUpdateWidget 方法后,组件的状态为 dirty
clean:标识当前组件为干净状态,重新渲染是不会执行build
参考:
1:https://blog.crazyming.com/note/3212/
2:https://blog.csdn.net/weixin_43222302/article/details/100886618