【问题标题】:VSCode hot reload for Flutter does not workFlutter 的 VSCode 热重载不起作用
【发布时间】:2019-06-14 11:50:48
【问题描述】:

我现在正在使用 VSCode 处理我的颤振应用程序,而热重载刚刚停止工作,就在我的开发过程中。我完全不知道为什么会发生这种情况,过去我对此完全没有意见。如果它对任何人有帮助,我正在处理我的应用程序的第二页,您可以通过第一页上的路线到达该页面。这就是热重载不起作用的原因吗?如果不是,有人可以告诉我为什么它不起作用吗?这真的很烦人并且阻碍了我的应用程序的进展。谢谢!

重新启动我的计算机,并重新启动调试。如果有帮助,我使用的是运行 macOS Mojave 版本 10.14.2 的 Macbook Pro 2015。

实际上没有任何代码要显示,它与代码无关。它是 VSCode 或 Flutter。

我希望热重载能够工作,但它没有。

【问题讨论】:

  • 为什么不在 Github 上填一个 bug?
  • 这严重到可以填写问题表吗?看起来这可能是一个小问题,我还没有看到其他人提出这个问题
  • 我个人使用的是Android Studio,所以对这个问题不能说太多。让我们等待其他人提出解决方案。
  • “不工作”到底是什么意思?
  • 这也发生在我身上,最好你在 github 上填写错误。它从昨天开始发生,似乎是在调用“颤振升级”之后。

标签: visual-studio-code flutter


【解决方案1】:

如果您使用 f5 启动应用或从 debug 的下拉菜单中选择 start debug,则热重载不起作用。

但是,如果您使用 Ctrl+f5 启动您的应用程序或从 debug 的下拉菜单中选择 start without debug 。

要解决此问题,请先使用 Shift+f5 关闭正在运行的调试会话。

然后单击菜单栏中的调试。点击开始而不调试。

现在热重载工作得很好。

您也可以使用终端进行热重载。 只需在终端输入:flutter run,应用就会启动。

只需在终端中按r热重载就会被初始化。

【讨论】:

  • 它确实对我有用 - 2021 年 9 月
  • 非常感谢,它有效 - 2021 年 10 月
【解决方案2】:

我注意到如果您在runApp 中直接传入MaterialApp,热重载将不起作用。如果创建了单独的核心小部件,那么一切都会正常工作。

工作示例:

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Hot reload works!!')),
      ),
    );
  }
}

不工作:

void main() => runApp(MaterialApp(
  home: Scaffold(
    appBar: AppBar(title: Text('Hot reload not working')),
  ),
));

也不要忘记在保存时启用热重载:https://stackoverflow.com/a/67132314/4990406

【讨论】:

    【解决方案3】:

    如果您仍然面临这个问题

    打开 VS 代码然后转到:

    • 文件 > 首选项 > 设置
    • 在搜索字段中输入“Hot Reload”
    • 您将看到“Flutter Hot Reload On Save”和三个选项
    • 默认为“手动”,因此将其更改为“始终”

    【讨论】:

      【解决方案4】:

      对于 VS 代码 转到文件>自动保存 确保你有“检查”自动保存。

      【讨论】:

      • 这对我有帮助。 (Y)
      • 也帮助了我,但它不必要地重新加载所有时间代码更改
      【解决方案5】:

      对于我在最新的 VS 工作室中,按 CRTL+s 可以很好地进行热重载。 有点像其他 IDE 的习惯。

      【讨论】:

      • 另外,请注意我不打扰使用 cmd
      • 为什么会这样?我反复按 CTRL + F5 并单击热重载按钮。
      • 我希望我能告诉你,我有一段时间没有使用 Flutter,因为我一直忙于其他工作。如果我要做出有根据的猜测,某些 IDE 在您保存它之前不会构建当前构建,通常在您正在处理的选项卡的顶角用 astrix 表示。所以一旦你保存它,它可能会自动编译和构建它,但我也猜测这些是混合中的一个古怪错误,因为我最初尝试了他们的建议但它没有工作
      【解决方案6】:

      这里引用sidnas的答案

      我注意到如果你在 runApp 中热重载不起作用 直接传入MaterialApp。如果创建单独的核心小部件 一切正常。

      工作示例:

      void main() => runApp(MyApp());
      
      class MyApp extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
          return MaterialApp(
            home: Scaffold(
              appBar: AppBar(title: Text('Hot reload works!!')),
            ),
          );
        }
      }
      

      不工作:

      void main() => runApp(MaterialApp(
        home: Scaffold(
          appBar: AppBar(title: Text('Hot reload not working')),
        ),
      ));
      

      第二个sn-p阻止热重载工作的原因是“main”只运行一次,而热重载不运行main。因此,要使其正常工作,您必须将 MaterialApp 分离到不同的小部件。

      【讨论】:

      • 感谢您明确说明为什么它不起作用。
      【解决方案7】:

      我找到了一种在 VS Code 中强制热重载的方法,这对于那些陷入这种情况的人来说非常有用:应用程序运行后,只需单击 VS Code 编辑器底部的调试选项按钮已经命名为“Flutter”,在“Debug Configuraion”顶部浮动窗口再次选择“flutter”后,会提示应用已经在调试中,但会发生热重载。

      【讨论】:

        【解决方案8】:

        首先保存您的项目,然后热重新加载它。

        【讨论】:

          【解决方案9】:

          这似乎是 1.32.1 版本中的 vscode 问题 - 请参阅 https://github.com/flutter/flutter/issues/29275https://github.com/Dart-Code/Dart-Code/issues/1518

          与此同时,您可以恢复到 1.31,等待下一个版本中的修复,安装 Insiders 版本(其中包含修复),或者可以从 vscode 终端使用“flutter run”。

          【讨论】:

            【解决方案10】:

            以下是热重载不起作用的官方记录案例:

            1. 有关应用状态的数据已更改(因为 Flutter 尝试在热重载之间保持应用的状态)
            2. 全局变量或静态字段的变化,因为 Flutter 将它们视为状态
            3. 对不在构建路径中的任何内容(例如 initState())以及应用的 main 本身的更改
            4. 您遇到编译错误,请检查debug console 确定
            5. 应用因不活动而被用户或操作系统杀死
            6. 当枚举类型更改为常规类时,反之亦然
            7. 字体已更改
            8. 修改泛型类型装饰时
            9. 修改包含的本机代码(Java、Kotlin 或 Swift)时
            10. CupertinoTabView 构建器小部件

            参考:Hot Reload

            【讨论】:

              【解决方案11】:

              如果您在 main.dart 中实现 MaterialApp 会导致此问题,最佳做法是分离出另一个 dart 文件,然后从 main.dart 引用。

              【讨论】:

              • 我该怎么做?
              【解决方案12】:

              为我工作:

              1. 转到您电脑上的 flutter 目录。
              2. 写入控制台:git checkout tags/2.0.5 (2.0.5 是目前稳定树中的最新版本,您可以选择其他任何版本。)
              3. 在项目中写入控制台:flutter --version 并且热重载应该可以工作。 我不知道为什么,但是在命令之后:颤振升级,我的热重载不起作用

              【讨论】:

                【解决方案13】:

                我遇到了同样的问题。目前我使用的是 VSCode 版本 1.39.2。

                要使热重载工作,您需要在 VSCode 中开始调试。

                正如文档中所说:“只有处于调试模式的 Flutter 应用程序才能热重载。” https://flutter.dev/docs/development/tools/hot-reload

                您可以在 Debug 内的 VSCode 顶部导航中或使用快捷键 F5 找到该选项。

                你不需要在终端上运行 Flutter,甚至在 VSCode 上也不需要,只需开始调试,它就会在调试模式下启动 lib/main.dart。

                如果这不能解决问题,请尝试降级到 VSCode 的最新版本。

                【讨论】:

                  【解决方案14】:

                  在 Linux 上使用 VS Code(v1.44.1)、Android Studio(v3.6.2)、Flutter v1.12.13+hotfix.9

                  Android studio > 在启动窗口 > 配置 > AVD 管理器 > 运行一个虚拟设备 > 确认 VS Code(v1.44.1) 有你正在运行的虚拟设备显示在右下角

                  VS Code > 运行(在顶部,在帮助旁边)> 开始调试(F5)或不调试就开始(Ctrl + F5)

                  将 Flutter 代码保存在 VS Code 中 然后应该触发模拟器进行热重载

                  【讨论】:

                    【解决方案15】:

                    我在 VS 代码中遇到了同样的问题。这是我解决它的方法:

                    1. 我使用来自外部文件的Textstyle 属性。我发现外部文件的变化并没有反映在热重载中。

                                Text(
                                  AppStrings.giveFeedbackPageText,
                                  style: AppStyles.bodyText,
                                  textAlign: TextAlign.center,
                                  overflow: TextOverflow.ellipsis,
                                ),
                      

                      所以我不得不使用该文件中的TextStyle 而不是外部文件,它可以工作!不知道原因。可能外部的style 需要在一个小部件内。

                    2. 另一种解决方案可能是 - 将 homeMaterialApp 分离到一个单独的小部件中。

                    【讨论】:

                      【解决方案16】:

                      对于那些使用 MAC 的人。

                      我使用的是mac,我通过先退出模拟器和VS Code然后重新启动计算机来解决这个问题。

                      请注意,当您使用无状态或有状态小部件时,您可以获得热重载功能。

                      按command+s会保存文件并自动执行热重载。

                      【讨论】:

                        【解决方案17】:

                        可能是您更改了热重载的键盘快捷键,请检查是否...

                        【讨论】:

                        【解决方案18】:

                        解决方案是:

                        1. 点击File > Preferences > Settings

                        2. 搜索“热重载”

                        3. 点击Flutter Hot Reload On Save并选择always

                        4. 然后点击File并点击Autosave

                        【讨论】:

                          【解决方案19】:

                          对于您的项目可能发生的 热重载 问题

                          这是您的 设备 的问题,而不是 flutterAndroid Studio

                          当您的 logcat 挂断时会发生这种情况。

                          您可能想要增加您的缓冲区大小

                          为此,请进入您的设备模拟器

                          设置 > 开发者选项确保它们已打开),

                          将缓冲区大小更改为更大的数字。

                          然后再次运行 flutter run -v

                          【讨论】:

                          • 同样的问题也发生在我身上,上述步骤没有成功。
                          • 这是从 GH 问题复制粘贴的!?我只是在其他地方读到它,它不起作用。
                          【解决方案20】:

                          确保你没有这种类型的导入,我快疯了,删除它们修复了热重载,检查你的所有文件,我在 github 中找到了这个答案:https://github.com/flutter/flutter/issues/49744

                          导入文件:///C:/Users/.../...//lib/filename.dart

                          【讨论】:

                            【解决方案21】:

                            试试 Ctrl + S , 当我按 Ctrl + S 时,它会自动进行热重载

                            【讨论】:

                              猜你喜欢
                              • 2020-07-02
                              • 2019-12-12
                              • 2021-05-04
                              • 2020-07-13
                              • 2017-03-13
                              • 2021-05-04
                              • 2020-05-26
                              • 1970-01-01
                              • 2017-05-18
                              相关资源
                              最近更新 更多