Flutter Stateful Widget запускается только один раз при сборке - PullRequest
0 голосов
/ 19 апреля 2020

Эта проблема возникла при первом запуске приложения сегодня. После некоторого тестирования я обнаружил, что методы, которые я вызываю в разделе сборки Widget, запускаются только один раз при начальной сборке или горячей перезагрузке. Раньше эти методы постоянно работали. Например, если я напечатал целое число со значением 5 в одном из методов, консоль отобразит:

I/flutter (  510): 5
I/flutter (  510): 5
I/flutter (  510): 5
I/flutter (  510): 5
I/flutter (  510): 5

et c ...

Теперь только консоль печатает целое число один раз (до горячей перезагрузки):

I/flutter (  510): 5
  • Даже при использовании асинхронного метода c он будет печататься только один раз на консоль.
  • Та же ситуация применима и к сообщениям об ошибках.
  • Похоже, что она не работает только на главной странице.
  • Эта проблема возникает и в других моих приложениях.
  • Я запустил flutter clean в консоли.
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel unknown, v1.12.13+hotfix.4, on Microsoft Windows [Version 10.0.18363.778], locale en-US)

[√] Android toolchain - develop for Android devices (Android SDK version 29.0.1)
[√] Android Studio (version 3.4)
[√] VS Code (version 1.44.2)
[√] Connected device (1 available)

• No issues found!

Мой вопрос был бы: правильно ли я реализовывал подобный код? Есть ли другой способ, которым я должен делать это, или флаттер сломан?

Спасибо, я ценю помощь!

@override
  Widget build(BuildContext context) {

    // This code only runs once on the inital build
    createDay();
    getSaveContent();
    _updatePointsProgress();
    printStuff();

    return MaterialApp(
        home: Builder(

1 Ответ

0 голосов
/ 19 апреля 2020

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

@override
  Widget build(BuildContext context) {
   //Some code here runs once 

  //Some code here is running more often than above code 
    return MaterialApp(
        home: Builder(

Это не то, что происходит. Раньше у вас, вероятно, было что-то, что вызывало перестройку, и теперь ваш виджет не перестраивается. Ваша функция сборки похожа на любую другую функцию, она выполняет каждую строку кода сверху вниз. Чтобы ответить на ваш вопрос, вы должны реализовать код в своем методе сборки, который может работать в любое время без каких-либо отрицательных побочных эффектов. Уже есть хорошая ветка Stack о поддержании чистоты методов сборки, я свяжу ее. Код инициализации должен go по крайней мере вне метода сборки, но в идеале в initState(). Дайте мне знать, если это не ответит на ваш вопрос.

Метод сборки должен быть чистым

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...