Flutter热重装无法在android studio(mac)中运行

时间:2019-07-20 18:24:50

标签: android ios android-studio flutter

在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

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

19 个答案:

答案 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)

这就是您要寻找的

enter image description here 在“文件”->“设置”->“键盘映射”中,您应该分配一些按键快捷方式来实现。默认为 Ctrl + \

答案 4 :(得分:1)

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

移动文件时,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)

有以下步骤可以解决这个问题

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

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

  1. 转到android studio并单击“帮助”,然后选择“检查更新”
  2. 现在单击更新按钮。
  3. 重新启动goto插件并通过卸载并重新安装pugins重新安装flutter插件。

答案 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和模拟器​​

  1. 通过打开Finder删除Android Studio,单击“应用程序”,右键单击Android Studio并单击“移至废纸

  2. 删除Android文件: $ cd〜/库/ Android $ rm -fr * $ CD $ 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

答案 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...