Flutter 中的热重启:什么时候和什么时候不?

Hot restart in Flutter: when and when not?

有人可以向我解释一下热重载和重启以及什么时候我不需要这样做(比如需要执行重建的代码更改)以及什么时候我肯定可以。在 Flutter web 和移动设备中调试时,如果我不确定我所做的更改是否影响了结果,我将关闭所有内容并重建项目...对 [=13= 这两种模式的一些见解] 会让我对在调试期间单击的按钮更有信心 ;)

IDE: Android Studio 3.5.1

这来自 Flutter for Android Studio 和 IntelliJ 的官方文档。

热重载与热重启

热重载通过将更新的源代码文件注入 运行 Dart VM(虚拟机)来工作。这不仅包括添加新的 类,还包括向现有 类 添加方法和字段,以及更改现有函数。一些类型的代码更改不能热重新加载:

  • 全局变量初始值设定项

  • 静态字段初始值设定项

  • app的main()方法

对于这些更改,您可以完全重新启动您的应用程序,而不必结束调试会话。

发件人:https://flutter.dev/docs/development/tools/android-studio#hot-reload-vs-hot-restart

还有另一种解释。

热重载:

热重载功能快速编译我们文件中新添加的代码并将代码发送到 Dart 虚拟机。完成更新 Code Dart 虚拟机后,使用小部件更新应用程序 UI。热重载比热重启花费更少的时间。热重载也有一个缺点,如果您在应用程序中使用状态,那么热重载会保留状态,因此它们不会在热重载时将我们的设置更新为默认值。

热重启:

热重启与热重载有很大不同。在热重启中,它会破坏保留状态值并将它们设置为默认值。因此,如果您在应用程序中使用状态值,那么在每次热重启后,开发人员都会获得完全编译的应用程序,并且所有状态都将设置为默认值。应用程序小部件树完全用新的类型代码重建。热重启比热重载花费更多的时间。

我的解释来自:https://flutter-examples.com/difference-between-hot-reload-and-hot-restart-in-flutter-dart/

如果热重载或热重启不起作用 只是 运行 命令 flutter 运行 并且这将与命令行

一起工作

现在有官方视频:Hot reload?! | Decoding Flutter

热重载 (<1s),也称为 'stateful hot reload' 应尽可能经常使用。您需要记住在这 3 种情况下,您应该进行热重启(~10s)并丢失应用程序的状态(当前变量):

  1. 全局变量初始值设定项,在 class
  2. 之外
  3. 静态字段初始值设定项
  4. app的main()方法

一个例子:

int globalVariableNeedsHotRestart = 5; // <-- A global variable.

class WhosebugWidget {
  static const staticFieldInitialized = Text("Hello"); // <-- Using the static keyword
}

main(List<String> args) {
  print(
      "This won't run until a hot restart. A hot reload won't do it."); // <-- Any code in main method
}