flutter:如何判断 widget 是否正在绘制
2021-06-19 本文已影响0人
李小轰
直接上代码:
//flutter调度阶段是否为 build/layout/paint
bool get isPersistentCallbacks =>
SchedulerBinding.instance?.schedulerPhase ==
SchedulerPhase.persistentCallbacks;
使用场景,例如重写 OverLayEntry 中 markNeedsBuild 方法
@override
void markNeedsBuild() {
if (isPersistentCallbacks) {
SchedulerBinding.instance?.addPostFrameCallback((_) {
super.markNeedsBuild();
});
} else {
super.markNeedsBuild();
}
}
课后知识整理
Flutter中有几个调度阶段:
- transientCallbacks : 主要处理动画计算,动画状态的更新
- midFrameMicrotasks : 处理transientCallbacks阶段触发的Microtasks,啥是Microtasks
- persistentCallbacks : 主要在下一帧之前,做一些清理工作或者准备工作
- idle : 不产生Frame的空闲期,可以处理Tasks(由SchedulerBinding.scheduleTask触发),microtasks(由scheduleMicrotask触发),定时器的回调,响应事件处理(例如:用户的输入