在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
这并不能阻止我的发展,但是我担心为什么会这样。
答案 0 :(得分:21)
Flutter文档说:“热重载将代码更改加载到VM中,并重新构建小部件树,从而保留应用程序状态;它不重新运行 主要()或 initState ()”
因此,如果应用程序逻辑位于 main方法之外,那么热重载就可以了。尝试按如下所示重构您的应用,然后执行重新启动(绿色按钮)。保存之后,您所做的任何后续更改都会重新加载。
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!!!")),
),
);
}
}
更新: 如果要添加新资产(例如图像或中间文件),热重装将无法工作。在这种情况下,您将不得不重新启动应用程序。
答案 1 :(得分:12)
尝试一下
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';
答案 2 :(得分:4)
用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!!!")),
);
}
}
答案 3 :(得分:1)
答案 4 :(得分:1)
热重载在我的项目中突然停止工作。使用 Android Studio 和 Windows。
移动文件时,Android Studio 会重构导入,这很简洁。但它会使用绝对导入(C://Users/Projects/.../file.dart),这会完全破坏热重载。移动文件时要小心。
答案 5 :(得分:0)
就我而言,它只是将整个 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),
)),
),
);
}
}
如果您只是在 main 函数中定义整个应用程序,即使 VS Code 也会抱怨。
解决了!享受:)
答案 6 :(得分:0)
我有同样的问题。要解决它,您需要更新flutter sdk。
答案 7 :(得分:0)
有以下步骤可以解决这个问题
检查 import package 行,它应该是这样的
packages: your file
不是 file:///
在终端/命令提示符中使用命令 flutter clean
然后 flutter pub get
注意:你必须从你的项目根目录使用这些命令
它对我有用
答案 8 :(得分:0)
在 Flutter 1.22.6 中遇到了同样的问题。但是当我使用 Cmd+S
而不是 Hot Reload(闪电)按钮时效果很好
答案 9 :(得分:0)
就我而言,我刚刚从手机中删除了旧应用。然后从 Android Studio 运行。也许我试过发布应用程序并且之后不删除(记不清了)。反正解决了!
答案 10 :(得分:0)
这些可能是因为代码和资产太多。只需从模拟器中删除应用程序,然后重新运行即可。
答案 11 :(得分:0)
将代码放入无状态信息 t中。 要使 HOT RELOAD 工作代码必须位于无状态的无状态小部件内。
答案 12 :(得分:0)
我正在将VScode用于Windows中的抖动。面临与热重装相同的问题。 将Dart and Flutter软件包更新为最新版本,幸运的是它开始工作。
答案 13 :(得分:0)
答案 14 :(得分:0)
如何在Android Studio 3.6.2内的StatelessWidget和Linux上的Flutter v1.12.13 + hotfix.9中使用Flutter Hot Reload ...在main.dart文件中:
确保在Android Studio中>文件>设置>语言和框架> Flutter>选中“在保存时执行热重载” !!
使用下面的代码->更改“ 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'),
);
}
}
答案 15 :(得分:0)
您必须保存对main.dart文件所做的更改。 在完成热装后, 在Visual Studio上,选择自动保存选项 那就可以正常工作了。
*热重装需要首先保存文件。
答案 16 :(得分:0)
如果所有其他方法都失败,则可以使用此方法: 1.关闭Android Studio和模拟器
通过打开Finder删除Android Studio,单击“应用程序”,右键单击Android Studio并单击“移至废纸”
删除Android文件: $ cd〜/库/ Android $ rm -fr * $ CD $ rm -fr .android
删除Java https://www.java.com/en/download/help/mac_uninstall_java.xml
安装Java
安装并启动Android Studio并接受许可协议 https://developer.android.com/studio/install
答案 17 :(得分:0)
如果我没记错的话,热重载会调用小部件的build方法,因为您所做的更改不是在build方法内进行的,因此它在屏幕上没有任何改变。
尝试在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!!!"));
}
}
答案 18 :(得分:0)
在终端中,运行
flutter doctor -v
flutter upgrade
另外,请尝试从Android Studio菜单中访问File > Invalidate Caches / Restart...