You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter State的dirty属性何时变更?构建阶段何时转为false?

Flutter中State的dirty属性何时被设为false?

直接答案

State的_dirty属性会在组件完成构建流程后,由Flutter框架的performRebuild方法将其重置为false,具体节点是在build方法执行完毕之后。

详细说明

  1. 当调用setState()时,内部会触发markNeedsBuild(),该方法会先检查_dirty状态:如果已经是true则直接返回;如果是false,会将_dirty设为true,并通知框架调度该组件的构建任务。你提到的代码片段也验证了这一点:
if (dirty) {
      return;
    }
    _dirty = true;
    owner!.scheduleBuildFor(this);
  1. 当框架开始处理该组件的构建任务时,会调用performRebuild()方法。这个方法的执行流程是:先调用组件的build方法完成UI构建,无论构建过程中是否修改了状态,都会在构建完成后执行_dirty = false,将标记重置为未脏状态。

  2. 这就解释了为什么在build期间_dirty始终为true——此时组件正处于构建流程中,标记还未被重置,所以此时调用setState()会因为markNeedsBuild()的判断逻辑而无法生效,这也和官方文档的提示一致:

由于在一帧内构建两次元素效率低下,应用和组件应确保仅在帧开始前的事件处理程序中标记组件为脏,而非在构建过程中。

内容的提问来源于stack exchange,提问作者Egor Grischenkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:52:37