flutter保存自动热重载失效需先确认flutter run活跃、dart插件识别项目且状态栏显示flutter设备;开启vscode设置dart.hotreloadonsave(仅对.dart文件生效);排除进程中断、防火墙拦截或插件过旧问题;注意热重载不支持构造函数修改等场景,此时需手动热重启。

Flutter保存时自动热重载没反应?先确认是否启用了热重载支持
VSCode本身不直接触发热重载,它依赖 flutter run 进程处于活跃监听状态,并且 Dart 插件需正确识别当前是 Flutter 项目。常见错误现象是:按 Ctrl+S 后控制台无任何输出,Hot reload 字样不出现。
- 确保你是在一个合法的 Flutter 项目根目录下打开 VSCode(即包含
pubspec.yaml且有lib/main.dart) - 终端中已执行过
flutter run(或点击 VSCode 左上角 ▶️ 运行按钮),设备/模拟器已连接并成功启动 App —— 自动热重载只在flutter run活跃会话中生效 - 检查状态栏右下角是否显示
Flutter(而非Dart)和设备名;若显示No device或Not in a Flutter project,自动热重载必然失败
如何开启保存即热重载:改的是 VSCode 设置,不是 Flutter 配置
这个功能由 Dart 插件提供,开关在 VSCode 的用户设置里,不是 flutter.yaml 或 settings.gradle。关键配置项是 dart.hotReloadOnSave,它控制保存文件时是否向正在运行的 flutter run 进程发送热重载指令。
- 打开 VSCode 设置(
Ctrl+,),搜索dart.hotReloadOnSave - 勾选该选项;它默认为
false,即使装了最新版 Dart 插件也不会自动开启 - 注意:该设置仅对
.dart文件生效;修改pubspec.yaml或资源文件(如图片、字体)不会触发热重载,必须手动按R或点击状态栏图标 - 如果你用的是多根工作区,确保 Dart 插件在对应 Flutter 文件夹内被激活(状态栏显示 Flutter 图标)
为什么改了设置还是不热重载?检查这三个干扰点
即使 dart.hotReloadOnSave 开启,仍可能因环境状态中断热重载链路。最常被忽略的是进程生命周期和插件权限问题。
-
flutter run进程意外退出(比如 App 崩溃、adb 断连、模拟器关闭)后,VSCode 不会自动重启它 —— 此时保存毫无反应,需手动重新运行 - 某些杀毒软件或防火墙会拦截 VSCode 与本地
flutter daemon的 WebSocket 通信(端口通常为127.0.0.1:xxxx),表现为“保存后卡住几秒,然后无响应” - Dart 插件版本太旧(
v3.80.0之前)存在热重载事件丢失 bug;升级到最新版(检查插件页更新时间是否为近 30 天内)可解决
热重载 vs 热重启:别把 hotReloadOnSave 当万能键
这个设置只触发 hot reload,不是 hot restart。两者行为差异极大,直接影响你是否看到预期效果。
-
hot reload会保留 App 当前状态(如页面栈、变量值、计时器),只替换修改的类定义;但无法处理:新增/删除字段、修改构造函数、改动main()或顶层变量初始化逻辑 - 遇到上述变更,保存后热重载会失败并报错
Performing hot reload... / Reloaded x of y libraries后无变化,或直接提示Could not reload changes—— 这时必须手动按Shift+R或点击状态栏重载图标执行热重启 - 如果频繁需要热重启,说明代码结构正偏离热重载友好模式(比如大量逻辑写在
build()外、过度依赖全局 mutable state)
热重载不是实时编译魔法,它依赖 Flutter 引擎对增量变更的识别能力。保存即重载只是省了一次按键,但理解什么能热、什么必须重启,比配置开关重要得多。











