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

Flutter热重启时build方法内print为何输出两次结果

问题描述

在Flutter开发时,在StatefulWidget的build方法中添加了打印变量value的print语句,但执行热重启(hot restart)操作后,控制台出现了两次打印结果。
相关实现代码如下:

class HomeScreen extends StatefulWidget {
 @override
  State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
   bool value=true;
  @override
  Widget build(BuildContext context) {
    print(value);
    return Checkbox(
        value: value,
        onChanged: (value){
          setState(() {
            this.value=value!;
          });
        });
  }
}
原因说明

该现象是Flutter开发模式下热重启流程的正常表现,不属于代码逻辑错误,两次打印的触发来源分别是:

  • 第一次打印来自热重启后的初始构建:热重启会清空应用全部运行时状态,从应用入口重新启动、挂载整个Widget树,遍历到HomeScreen节点时,_HomeScreenState的build方法会被首次调用完成首帧渲染,触发第一次打印。
  • 第二次打印来自热重启后的全局一致性重建:热重启流程收尾阶段,Flutter框架会强制触发一次全Widget树重建,保证界面渲染结果和最新代码完全对齐,避免热重启后出现UI与状态不匹配的问题,这一过程会让HomeScreen的build方法再次执行,触发第二次打印。

该双次build调用仅存在于开发阶段的热重载、热重启流程中。生产环境下应用正常冷启动时,build方法仅会在组件首次挂载、主动调用setState更新、父组件重建、依赖的InheritedWidget发生变化这几个场景触发,不会无故重复执行。

内容的提问来源于stack exchange,提问作者Irfan Ganatra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:33:39