Горячая перезагрузка Flutter не работает в студии Android (mac)

Работая на компьютере Mac, я обнаружил, что горячая перезагрузка не работает в Android Studio. Я не знаю, что не так :)

Вот код, который не перезагружается (я меняю текст Привет мир на текст Образец флаттера)

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

Это не останавливает мое развитие, но меня беспокоит, почему это происходит.

Это странно, у меня тоже было пару раз. Я все закрыл, перезапустил проект и все заработало.

shb 20.07.2019 20:48

Мой вопрос немного не в тему, возникла ли какая-то проблема при использовании IntelliJ?

ישו אוהב אותך 24.07.2019 08:06

Я не использую IntelliJ, извините.

Jitesh Mohite 24.07.2019 13:08

Моя горячая перезагрузка работает в коде Visual Studio, но не работает в Android Studio, кто-нибудь?

neobie 07.05.2020 15:48

Я думаю, что правильный ответ - Инвин; stackoverflow.com/a/61567821/5503625 Вы должны пометить его как принятое

Piyin 06.06.2020 20:40
26
5
25 970
20
Перейти к ответу Данный вопрос помечен как решенный

Ответы 20

У меня такая же проблема. Чтобы решить эту проблему, вам нужно обновить flutter sdk.

как его обновить? хотя я применил команду flutter upgrade и получил все, что является датой обновления 2.

snake_eyes 27.01.2020 16:39

Удалите свой флаттер SDK. Загрузите и извлеките новый файл с веб-сайта flutter.io.

Abdoulaye BARRY 27.01.2020 22:48

в терминале запустить

flutter doctor -v

flutter upgrade

Также попробуйте File > Invalidate Caches / Restart... из меню студии Android.

File > Invalidate Caches/Restart решил это для меня. Спасибо.

Simple UX Apps 24.11.2019 13:01

Это то, что вы ищете

В File -> Settings -> Keymap вы должны назначить комбинацию клавиш, чтобы это произошло. По умолчанию это будет Ctrl+\

Видео по вопросу показывает, что происходит горячая перезагрузка, флаттер-сообщение, но в эмуляторе ничего не происходит, так что это не проблема быстрого доступа.

George 30.07.2019 20:37

Если я не ошибаюсь, горячая перезагрузка вызывает метод сборки вашего виджета, поскольку внесенные вами изменения не были сделаны внутри метода сборки, они ничего не изменили на экране.

Попробуйте изменить текст внутри метода 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 и повторное открытие сделали свое дело. @jitsm555.

Luiz França 30.07.2019 12:24

Это работает, если ничего не помогает: 1. Закройте Android Studio и симуляторы.

  1. Удалите Android Studio, открыв Finder, щелкните «Приложения», щелкните правой кнопкой мыши Android Studio и выберите «Переместить в корзину».

  2. Удалить файлы Android: $ cd ~/Библиотека/Android $ гм - фр * $ компакт-диск $ 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

Вы должны сохранить сделанные вами изменения в файле main.dart. После этого горячая перезагрузка будет работать, в Visual Studio выберите опцию автосохранения тогда он будет работать отлично.

*Горячая перезагрузка должна сначала сохранить ваши файлы.

Как использовать Flutter Hot Reload в StatelessWidget внутри Android Studio 3.6.2 и Flutter v1.12.13+hotfix.9 в Linux... внутри файла 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'),
    );
  }
}

Оберните свой код знаком 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, то он будет в другом уродливом стиле.

Konstantin Kozirev 07.08.2020 23:16

Более того, я только что проверил, и он также работает с StatelessWidget. Так что абсолютно нет причин использовать StatefulWidget и MaterialApp. Hotreload работает с StatelessWidget.

Konstantin Kozirev 07.08.2020 23:32
Ответ принят как подходящий

В документации Flutter говорится: «Горячая перезагрузка загружает изменения кода в виртуальную машину и перестраивает дерево виджетов, сохраняя состояние приложения; это не повторяетсяосновной() или initState()»

Итак, похоже, что если логика приложения находится за пределами основной метод, то горячая перезагрузка работает. Попробуйте реорганизовать свое приложение, как показано ниже, а затем выполните Начать сначала (зеленая кнопка). Любые последующие изменения, которые вы вносите, при сохранении будут иметь значение ГОРЯЧАЯ ПЕРЕЗАГРУЗКА.

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.

Vu Pham 02.06.2020 02:32

Рад, что смог помочь

Invin 04.06.2020 02:44

Большое спасибо! Я сомневаюсь, что это как-то связано с последним обновлением Flutter, только чтобы узнать, что ваш ответ объясняет виновника.

DYS 03.10.2020 11:29

Это правильное решение, если горячая перезагрузка не работает, даже если включены настройки горячей перезагрузки.

Bala 25.10.2020 09:13

Попробуй это

Решение на GitHub Перезагружено 0 библиотек NNN в Xms.

Android Studio использует IDEA для автоматического импорта файлов, например

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

Измените его на

import 'package:flutter_project/home_page.dart';
  1. Перейдите в студию Android, нажмите «Справка» и выберите «Проверить наличие обновлений».
  2. Теперь нажмите на кнопку обновления.
  3. После перезапустите плагины goto и переустановите плагин флаттера, удалив и переустановив pugins.

Я использую VScode для флаттера в Windows. Столкнулся с такой же проблемой при горячей перезагрузке. Обновлен пакет Dart и Flutter до последней версии, и, к счастью, он заработал.

Поместите свой код в видж без гражданстваt. Чтобы код ГОРЯЧАЯ ПЕРЕЗАГРУЗКА работал, он должен находиться внутри виджета без сохранения состояния.

Можете ли вы объяснить больше с некоторым примером кода?

Petro 14.02.2021 23:35

Вы имеете в виду «или» вместо «из»?

Kaigo 26.07.2021 23:54

Это может быть вызвано слишком большим количеством кодов и активов. Просто удалите приложение из эмулятора и снова запустите его.

В моем случае я просто удалил старое приложение с телефона. Затем запустите из Android Studio. Может быть, я пробовал выпустить приложение и не удалять его после (точно не помню). В любом случае это решаемо!

Столкнулся с той же проблемой с Flutter 1.22.6. Но работало нормально, когда я использовал Cmd+S вместо кнопки Hot Reload (молния)

Существуют следующие шаги для решения этой проблемы

  1. Проверьте строку импортный пакет, она должна быть такой packages: your file не file:///

  2. используйте команду flutter clean, затем flutter pub get в терминале / командной строке

NOTE: you have to use these command from your project root directory

Это работа для меня

Горячая перезагрузка внезапно перестала работать в моем проекте. Использование Android-студия и Окна.

При перемещении файлов Android Studio рефакторит импорт, что очень удобно. Но он будет использовать абсолютный импорт (C://Users/Projects/.../file.dart), и это полностью нарушит горячую перезагрузку. Будьте осторожны при перемещении файлов.

В моем случае это было просто извлечение всего 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 жалуется, если вы просто определяете все свое приложение внутри основной функции.

Решено! Наслаждаться :)

Горячая перезагрузка работает только из основного метода. Если вы находитесь внутри основного метода, попробуйте создать класс виджетов без состояния или с состоянием и передать имя в качестве параметра для runApp()

Другие вопросы по теме