【问题标题】:Flutter Hot reloading not working in android studio(mac)颤振热重新加载在android studio(mac)中不起作用
【发布时间】:2019-11-29 08:03:57
【问题描述】:

在 Mac 机器上工作时,我发现热重载在 Android Studio 中不起作用。我不知道怎么了:)

这是没有重新加载的代码(我正在将 Hello world 文本更改为 Flutter Sample 文本)

import 'package:flutter/material.dart';

void main() {
  runApp(new MaterialApp(
    home: new Scaffold(
      appBar: new AppBar(
        title: new Text("Demo Project"),
      ),
      body: Center(child: new Text("Hello World!!!")),
    ),
  ));
}

请看下面的视频链接 https://www.dropbox.com/s/e7viujcgv8w0mtr/hot_reload.mp4?dl=0

这不会阻止我的发展,但我很担心为什么会这样。

【问题讨论】:

  • 这很奇怪,我也发生过几次。我关闭了所有东西,重新启动了项目,然后它工作正常。
  • 我的问题有点跑题了,当您使用 IntelliJ 时是否发生了一些问题?
  • 抱歉,我没有使用 IntelliJ。
  • 我的热重载在 Visual Studio 代码中工作,但在 Android Studio 中不工作,任何人?
  • 我认为正确的答案是 Invin 的; stackoverflow.com/a/61567821/5503625您应该将其标记为已接受

标签: android ios android-studio flutter


【解决方案1】:

Flutter 文档说“热重载将代码更改加载到 VM 中并重新构建小部件树,保留应用程序状态;它不会重新运行 ma​​in()或 initState()"

因此,如果应用程序逻辑位于 ma​​in 方法 之外,那么热重载就会起作用。尝试像下面那样重构您的应用程序,然后执行 Restart(绿色按钮)。您所做的任何后续更改都将在保存后热重载

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text("Demo Project"),
        ),
        body: Center(child: new Text("Hello World!!!")),
      ),
    );
  }
}

更新: 如果您要添加新资产(如图像或媒体文件),热重载将不起作用。在这些情况下,您必须重新启动应用程序。

【讨论】:

  • 这解决了我的问题。我正在使用 Flutter 版本 1.18.0-11.1.pre。
  • 很高兴,我能帮上忙
  • 非常感谢!我怀疑这与最新的 Flutter 升级有关,只是为了找出你的答案解释了罪魁祸首。
  • 这是正确的解决方案,如果即使启用了热重载首选项,热重载也不起作用。
【解决方案2】:

试试这个

GitHub上的解决方案Reloaded 0 of NNN libraries in Xms

Android Studio 使用 IDEA 自动导入文件,像这样

import 'file///F:/flutter_project/lib/home_page.dart';

改成

import 'package:flutter_project/home_page.dart';

【讨论】:

    【解决方案3】:

    使用StatefulWidget 包装您的代码,如下面的代码所示。 在观看旧教程时,这可能会让人感到困惑,因为它曾经在早期的 Flutter 版本上没有它也能正常工作。

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(new MaterialApp(home: MyApp()));
    }
    
    class MyApp extends StatefulWidget {
      MyApp({Key key}) : super(key: key);
    
      @override
      _MyAppState createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar: new AppBar(
            title: new Text("Demo Project"),
          ),
          body: Center(child: new Text("Hello World!!!")),
        );
      }
    }
    
    

    【讨论】:

    • 在这种情况下使用 MaterialApp 是不合理的。它可以只是runApp(new myApp()) 中的void main()。如果你使用 MaterialApp,那么它就会有不同的丑陋风格。
    • 此外,我刚刚检查过它也适用于StatelessWidget。所以绝对没有理由使用StatefulWidgetMaterialApp。 Hotreload 适用于StatelessWidget
    【解决方案4】:

    在终端中,运行

    flutter doctor -v

    flutter upgrade

    另外,在 Android Studio 菜单中尝试File &gt; Invalidate Caches / Restart...

    【讨论】:

    • File > Invalidate Caches / Restart 为我解决了这个问题。谢谢。
    【解决方案5】:

    如果我没记错的话,热重载会调用您的小部件的构建方法,因为您所做的更改不是在构建方法中进行的,因此它不会更改屏幕中的任何内容。

    尝试更改 MyWidget Build 方法中的短信,看看它是否有效。

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(new MaterialApp(
        home: new Scaffold(
          appBar: new AppBar(
            title: new Text("Demo Project"),
          ),
          body: new MyWidget(),
        ),
      ));
    }
    
    class MyWidget extends StatelessWidget {
      const MyWidget({
        Key key,
      }) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return Center(child: new Text("Hello World!!!"));
      }
    }
    

    【讨论】:

    • 我曾经遇到过这个问题,然后关闭 android studio 并重新打开就可以了。 @jitsm555。
    【解决方案6】:

    将您的代码放入 stateless of stateful widget 中。 要使 HOT RELOAD 工作代码必须在有状态小部件的无状态内。

    【讨论】:

    • 你能用一些示例代码解释更多吗?
    • 你的意思是“或”而不是“的”?
    【解决方案7】:

    热重载在我的项目中突然停止工作。使用 Android StudioWindows

    在移动文件时,Android Studio 会重构导入,这很简洁。但它会使用 absolute imports (C://Users/Projects/.../file.dart) 并且会完全中断热重载。移动文件时要小心。

    【讨论】:

      【解决方案8】:

      我在 Windows 中使用 VScode 进行颤振。在热重载方面面临同样的问题。 将 Dart 和 Flutter 包更新到最新版本,幸运的是它开始工作了。

      【讨论】:

        【解决方案9】:

        我遇到了同样的问题。要解决它,您需要更新flutter sdk。

        【讨论】:

        • 如何更新呢?虽然我应用了命令颤振升级并得到一切都是更新2日期。
        • 删除你的flutter sdk。从 flutter.io 网站下载并解压新的。
        【解决方案10】:

        如果所有其他方法都失败了,则此方法有效: 1. 关闭 Android Studio 和模拟器

        1. 通过打开 Finder 删除 Android Studio,点击 Applications,右键点击 Android Studio 并点击 Move to Trash

        2. 删除 Android 文件: $ cd ~/库/Android $ rm -fr * $光盘 $ rm -fr .android

        3. 删除 Java https://www.java.com/en/download/help/mac_uninstall_java.xml

        4. 安装 Java

        5. 安装并启动 Android Studio 并接受许可协议 https://developer.android.com/studio/install

        【讨论】:

          【解决方案11】:

          您必须保存您在 main.dart 文件中所做的更改。 之后热重载将起作用, 在 Visual Studio 上选择自动保存选项 那么它会工作得很好。

          *热重载需要先保存你的文件。

          【讨论】:

            【解决方案12】:

            如何在 Android Studio 3.6.2 中的 StatelessWidget 和 Linux 上的 Flutter v1.12.13+hotfix.9 中使用 Flutter Hot Reload ... main.dart 文件中:

            确保在 Android Studio > File > settings > Languages & Frameworks > Flutter > 选中“Perform hot reload on save”!!!

            使用下面的代码 -> 更改 'Hello' -> 保存 -> 查看热重载结果

            import 'package:flutter/material.dart';
            
            void main() {
              runApp(MyApp());
            }
            
            class MyApp extends StatelessWidget {
              // StatelessWidget turns this class into a widget
              Widget build(BuildContext context) {
                return MaterialApp(
                  home: Text('Hello'),
                );
              }
            }
            

            【讨论】:

              【解决方案13】:
              1. 转到 android studio 并单击帮助并选择检查更新
              2. 现在点击更新按钮。
              3. 重新启动 goto 插件后,通过卸载并重新安装 pugins 重新安装 Flutter 插件。

              【讨论】:

                【解决方案14】:

                这些可能是由于代码和资产过多造成的。只需从模拟器中删除应用并重新运行即可。

                【讨论】:

                  【解决方案15】:

                  就我而言,我刚刚从手机中删除了旧应用程序。然后从 Android Studio 运行。也许我尝试了发布应用程序并且之后不删除(不记得确切)。不管怎样,解决了!

                  【讨论】:

                    【解决方案16】:

                    在 Flutter 1.22.6 中遇到了同样的问题。但是当我使用 Cmd+S 而不是热重载(闪电)按钮时工作正常

                    【讨论】:

                      【解决方案17】:

                      有以下步骤可以解决此问题

                      1. 检查 import package 应该是这样的行 packages: your file 不是 file:///

                      2. 在终端/命令提示符中使用命令flutter clean 然后flutter pub get

                      注意:您必须在项目根目录中使用这些命令

                      对我有用

                      【讨论】:

                        【解决方案18】:

                        在我的例子中,它只是将整个 MaterialApp 提取到它自己的无状态 Widget 中。

                        之前-

                        void main() {
                          runApp(MaterialApp(
                              home: Scaffold(
                                backgroundColor: Colors.teal,
                                body: SafeArea(
                                    child: Container(
                                  color: Colors.white,
                                  child: Text("Helloo"),
                                  height: 100,
                                  width: 100,
                                  margin: EdgeInsets.all(20),
                                )),
                              ),
                            ));
                        }
                        

                        之后-

                        void main() {
                          runApp(MyApp());
                        }
                        
                        class MyApp extends StatelessWidget {
                          @override
                          Widget build(BuildContext context) {
                            return MaterialApp(
                              home: Scaffold(
                                backgroundColor: Colors.teal,
                                body: SafeArea(
                                    child: Container(
                                  color: Colors.white,
                                  child: Text("Helloo"),
                                  height: 100,
                                  width: 100,
                                  margin: EdgeInsets.all(20),
                                )),
                              ),
                            );
                          }
                        }
                        

                        如果您只是在主函数中定义整个应用程序,即使 VS Code 也会报错。

                        解决了!享受:)

                        【讨论】:

                          【解决方案19】:

                          这就是你要找的东西

                          在文件 -> 设置 -> 键盘映射中,您应该为此分配一些快捷键。默认为 Ctrl+\

                          【讨论】:

                          • 该问题的视频显示了热重载发生,颤动消息,但模拟器上没有发生任何事情,所以这不是快捷方式问题。
                          猜你喜欢
                          • 2020-05-26
                          • 2021-03-30
                          • 2020-09-11
                          • 2020-07-13
                          • 2018-09-26
                          • 2021-12-12
                          • 1970-01-01
                          • 1970-01-01
                          • 2021-05-16
                          相关资源
                          最近更新 更多