flutter:如何判断 widget 是否正在绘制

直接上代码:

//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触发),定时器的回调,响应事件处理(例如:用户的输入
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容