颤振热重新加载在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 中并重新构建小部件树,保留应用程序状态;它不会重新运行 main()或 initState()"
因此,如果应用程序逻辑位于 main 方法 之外,那么热重载就会起作用。尝试像下面那样重构您的应用程序,然后执行 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
。所以绝对没有理由使用StatefulWidget
和MaterialApp
。 Hotreload 适用于StatelessWidget
。【参考方案4】:
在终端中,运行
flutter doctor -v
flutter upgrade
另外,在 Android Studio 菜单中尝试File > 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 Studio 和 Windows。
在移动文件时,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 后无法在颤振中找到或加载主类