Flutter中的热重启:何时以及何时不?

时间:2019-11-16 12:02:25

标签: android-studio flutter flutter-web

有人可以向我解释热重装和重新启动以及何时我不需要这样做(例如需要执行重建的代码更改)以及何时可以做到。如果不确定不确定所做的更改是否会影响结果,则在Flutter Web和Mobile上进行调试时,我将全部关闭并重新构建项目...“快速构建”这两种模式中的一些见解“会让我对在调试过程中单击哪个按钮更有信心;)

  

IDE:Android Studio 3.5.1

3 个答案:

答案 0 :(得分:0)

如果来自Flutter for Android Studio和IntelliJ的官方文档中,则为

热重装与热重装

热重装通过将更新的源代码文件注入正在运行的Dart VM(虚拟机)中来进行。这不仅包括添加新类,还包括向现有类添加方法和字段,以及更改现有功能。但是,某些类型的代码更改无法热重新加载:

  • 全局变量初始化程序

  • 静态字段初始化程序

  • 应用程序的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/

得到了这种解释。

答案 1 :(得分:0)

如果热重装或热重启动不起作用 只需运行命令flutter运行,多数民众赞成将与命令行正确工作

答案 2 :(得分:0)

热重载(<1s),也称为“有状态热重载”,应尽可能多地使用。您需要记住在这3种情况下,应该进行热重启(〜10s)并丢失应用程序的状态(当前变量):

  1. 类外部的全局变量初始化器
  2. 静态字段初始化器
  3. 应用程序的main()方法

一个例子:

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

class StackOverflowWidget {
  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
}