下面是热重载不生效的情况:
-
当应用程序被终止时,热重载可能会中断。例如,如果应用程序在后台停留的时间过长。
-
当代码更改引入编译错误时,热重载会生成类似于以下内容的错误消息:
Hot reload was rejected: '/path/to/project/lib/main.dart': warning: line 16 pos 38: unbalanced '{' opens here Widget build(BuildContext context) { ^ '/path/to/project/lib/main.dart': error: line 33 pos 5: unbalanced ')' ); ^
-
当枚举类型更改为常规类或常规类更改为枚举类型时,热重载不起作用。
-
修改泛型类型声明时,热重载将不起作用。
-
如果更改了本机代码(例如 Kotlin、Java、Swift 或 Objective-C),则必须执行完全重启(停止并重启应用)才能看到更改生效。
-
全局变量和静态字段被视为状态,因此在热重载期间不会重新初始化。
-
如果修改后的代码位于根小部件
build()
方法的下游,则热重载的行为将按预期进行。但是,如果由于重新构建小部件树而无法重新执行修改后的代码,则在热重载后不会看到它的效果。
这是Android Studio 中的运行、运行调试、热重载和热重启控件。
热重载执行步骤:
- 调用热重载时,主机会查看自上次编译以来编辑的代码。重新编译以下库:
- 任何代码已更改的库
- 应用程序的主库
- 主库中通向受影响库的库
- 这些库的源代码被编译成内核文件,并发送到移动设备的 Dart VM。
- Dart VM 从新的内核文件重新加载所有库。到目前为止,没有代码被重新执行。
- 然后,热重载机制会导致 Flutter 框架触发所有现有小部件和渲染对象的重建/重新布局/重绘。