Работая на компьютере 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
Это не останавливает мое развитие, но меня беспокоит, почему это происходит.
Мой вопрос немного не в тему, возникла ли какая-то проблема при использовании IntelliJ?
Я не использую IntelliJ, извините.
Моя горячая перезагрузка работает в коде Visual Studio, но не работает в Android Studio, кто-нибудь?
Я думаю, что правильный ответ - Инвин; stackoverflow.com/a/61567821/5503625 Вы должны пометить его как принятое
У меня такая же проблема. Чтобы решить эту проблему, вам нужно обновить flutter sdk.
как его обновить? хотя я применил команду flutter upgrade и получил все, что является датой обновления 2.
Удалите свой флаттер SDK. Загрузите и извлеките новый файл с веб-сайта flutter.io.
в терминале запустить
flutter doctor -v
flutter upgrade
Также попробуйте File > Invalidate Caches / Restart... из меню студии Android.
File > Invalidate Caches/Restart решил это для меня. Спасибо.
Это то, что вы ищете
В File -> Settings -> Keymap вы должны назначить комбинацию клавиш, чтобы это произошло. По умолчанию это будет Ctrl+\
Видео по вопросу показывает, что происходит горячая перезагрузка, флаттер-сообщение, но в эмуляторе ничего не происходит, так что это не проблема быстрого доступа.
Если я не ошибаюсь, горячая перезагрузка вызывает метод сборки вашего виджета, поскольку внесенные вами изменения не были сделаны внутри метода сборки, они ничего не изменили на экране.
Попробуйте изменить текст внутри метода 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.
Это работает, если ничего не помогает: 1. Закройте Android Studio и симуляторы.
Удалите Android Studio, открыв Finder, щелкните «Приложения», щелкните правой кнопкой мыши Android Studio и выберите «Переместить в корзину».
Удалить файлы Android: $ cd ~/Библиотека/Android $ гм - фр * $ компакт-диск $ rm -fr .android
Удалить Java https://www.java.com/en/download/help/mac_uninstall_java.xml
Установить Java
Установите и запустите 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, то он будет в другом уродливом стиле.
Более того, я только что проверил, и он также работает с StatelessWidget. Так что абсолютно нет причин использовать StatefulWidget и MaterialApp. Hotreload работает с StatelessWidget.
В документации 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.
Рад, что смог помочь
Большое спасибо! Я сомневаюсь, что это как-то связано с последним обновлением Flutter, только чтобы узнать, что ваш ответ объясняет виновника.
Это правильное решение, если горячая перезагрузка не работает, даже если включены настройки горячей перезагрузки.
Попробуй это
Решение на GitHub Перезагружено 0 библиотек NNN в Xms.
Android Studio использует IDEA для автоматического импорта файлов, например
import 'file///F:/flutter_project/lib/home_page.dart';
Измените его на
import 'package:flutter_project/home_page.dart';
Я использую VScode для флаттера в Windows. Столкнулся с такой же проблемой при горячей перезагрузке. Обновлен пакет Dart и Flutter до последней версии, и, к счастью, он заработал.
Поместите свой код в видж без гражданстваt. Чтобы код ГОРЯЧАЯ ПЕРЕЗАГРУЗКА работал, он должен находиться внутри виджета без сохранения состояния.
Можете ли вы объяснить больше с некоторым примером кода?
Вы имеете в виду «или» вместо «из»?
Это может быть вызвано слишком большим количеством кодов и активов. Просто удалите приложение из эмулятора и снова запустите его.
В моем случае я просто удалил старое приложение с телефона. Затем запустите из Android Studio. Может быть, я пробовал выпустить приложение и не удалять его после (точно не помню). В любом случае это решаемо!
Столкнулся с той же проблемой с Flutter 1.22.6. Но работало нормально, когда я использовал Cmd+S вместо кнопки Hot Reload (молния)
Существуют следующие шаги для решения этой проблемы
Проверьте строку импортный пакет, она должна быть такой
packages: your file не file:///
используйте команду 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()
Это странно, у меня тоже было пару раз. Я все закрыл, перезапустил проект и все заработало.