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

为何Flutter Hot Restart触发两次build,Hot Reload仅触发一次?

回答

Flutter Hot Restart触发两次build的核心原因

1. Hot Restart的底层逻辑

Hot Restart会彻底重启Flutter的Dart虚拟机,从头初始化整个应用生命周期:

  • 第一次build:应用启动时,框架首次构建Widget树,触发build执行。
  • 第二次build:这是Flutter启动流程的正常行为——框架在完成初始Widget树构建后,会处理系统层面的回调(比如窗口尺寸确认、初始化绑定完成后的帧刷新),这会再次触发Widget树的重建。
  • 由于全局变量cnt随虚拟机重启被重置为0,所以两次build会输出1、2。

2. Hot Reload的执行差异

Hot Reload是增量代码重载,不会重启虚拟机,且完全保留现有Widget的State状态:

  • 它仅触发一次build:Reload时,框架只会将修改后的代码同步到已存在的Widget树中,不需要重新走完整的应用初始化流程,因此只会执行一次build函数,cnt会在之前的数值上继续递增。

重要提示

你在build中修改全局变量属于副作用操作,这违背了Flutter对build函数的设计要求——build应该是纯函数,仅根据State和外部参数构建Widget,不能包含状态修改、打印等副作用,否则会导致不可预测的UI行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:20:20