颤振热重新加载在android studio(mac)中不起作用

Posted

技术标签:

【中文标题】颤振热重新加载在android studio(mac)中不起作用【英文标题】:Flutter Hot reloading not working in 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 的; ***.com/a/61567821/5503625您应该将其标记为已接受 【参考方案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 和模拟器

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

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

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

    安装 Java

    安装并启动 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】:
    转到 android studio 并单击帮助并选择检查更新 现在点击更新按钮。 重新启动 goto 插件后,通过卸载并重新安装 pugins 重新安装 Flutter 插件。

【讨论】:

【参考方案14】:

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

【讨论】:

【参考方案15】:

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

【讨论】:

【参考方案16】:

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

【讨论】:

【参考方案17】:

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

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

    在终端/命令提示符中使用命令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+\

【讨论】:

该问题的视频显示了热重载发生,颤动消息,但模拟器上没有发生任何事情,所以这不是快捷方式问题。

以上是关于颤振热重新加载在android studio(mac)中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

是否可以同时在iOS和Android模拟器上启用热重新加载?

颤振热重载不起作用。需要帮助

错误:将 android studio 更新到 4.1 后无法在颤振中找到或加载主类

在模拟器中更改方向时出现颤振调试问题

热重载不起作用,但在 Android Studio 中热重启有效

Android Studio Flutter Hot Reload热加载无效