【问题标题】:Hot restart in Flutter: when and when not?Flutter 中的热重启:何时何地?
【发布时间】:2020-03-12 09:40:34
【问题描述】:

有人可以向我解释一下热重载和重新启动以及什么时候我不需要这样做(比如更改需要执行重建的代码)以及什么时候可以。在 Flutter web 和 mobile 中调试时,如果我不确定我所做的更改会影响结果,我会关闭所有并重新构建项目......对这两种“快速构建”模式的一些见解" 会让我对在调试期间单击的按钮更有信心;)

IDE:Android Studio 3.5.1

【问题讨论】:

标签: android-studio flutter flutter-web


【解决方案1】:

这来自 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。热重载比热重启花费的时间更少。热重载也有一个缺点,如果您在应用程序中使用状态,那么热重载会保留状态,因此它们不会在热重载时将我们的设置更新为默认值。

热重启:

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

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

【讨论】:

    【解决方案2】:

    如果热重载或热重启不起作用 只需运行命令flutter run,这将与命令行一起工作

    【讨论】:

      【解决方案3】:

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

      应尽可能频繁地使用热重载(

      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
      }
      

      【讨论】:

        猜你喜欢
        • 2022-10-06
        • 2018-10-28
        • 2020-02-23
        • 2021-10-02
        • 2021-09-07
        • 2020-04-27
        • 2019-07-02
        • 2021-08-20
        • 2019-03-25
        相关资源
        最近更新 更多