为何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
相关产品推荐
相关产品推荐

