Заголовок простой строки не обновляется при использовании горячей перезагрузки

#flutter #flutter-layout

#flutter #flutter-layout

Вопрос:

Горячая перезагрузка не работает в простом Hello World примере. При попытке изменить text , a string , на что-то другое во время выполнения и горячей перезагрузки ничего не происходит. Я выполняю отладку на физическом устройстве и использую VSCode.

 import 'package:flutter/material.dart';

void main() {
  String text = "Hello world";
      runApp(Center(child: new Text(text, textDirection: TextDirection.ltr)));
}
  

Является ли горячая перезагрузка ненадежной или я делаю что-то не так?

РЕДАКТИРОВАТЬ: выяснилось, что перезапуск приложения с помощью CTRL SHIFT F5 работал так, как и должна выполняться горячая перезагрузка.

Ответ №1:

В частности, горячая перезагрузка приводит к перестройке всех существующих виджетов. Автоматически выполняется только код, участвующий в перестройке виджетов.

https://flutter.dev/docs/development/tools/hot-reload

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

 import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    String text = "Hello world";
    return Center(
      child: new Text(text, textDirection: TextDirection.ltr),
    );
  }
}
  

Ответ №2:

Если вы создадите свой класс таким образом, я думаю, проблем не возникнет :

 import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.

  @override
  Widget build(BuildContext context) {
  String  text="Hello World"
    return MaterialApp(
        home: Scaffold(
            body: Center(
      child: Text(text,textDirection: TextDirection.ltr),
    )));
  }
}
  

Ответ №3:

Однако некоторые типы изменений кода не могут быть загружены горячей перезагрузкой:

  • Инициализаторы глобальных переменных
  • Инициализаторы статических полей
  • main() Метод приложения

Для этих изменений вы можете полностью перезапустить свое приложение, не завершая сеанс отладки:

  • Не нажимайте кнопку остановки; просто повторно нажмите кнопку Запуска (если в сеансе запуска) или кнопку отладки (если в сеансе отладки), или нажмите кнопку ‘горячей перезагрузки’.

Нашел это на портале разработчиков Flutter.