2024-09-11 flutter 生命周期

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容