Ошибка сборки в Dart / Flutter во время сборки - PullRequest
0 голосов
/ 21 февраля 2019

Итак, в моей функции сборки я загружаю свои пользовательские данные, и после их загрузки я хочу изменить тему приложения (которая вызывает setState ()).Проблема в том, что я не могу вызвать setState во время процесса сборки, как показано в приведенной ниже ошибке.Как бы я мог загрузить выбранную пользователем тему при запуске приложения?Кроме того, не рекомендуется загружать данные внутри функции сборки?Кажется, работает хорошо, но чувствует себя немного брутто.Спасибо!

Widget build(BuildContext context) {
    //get user object from Firebase
    //once user is loaded, take their chosen color theme and call updateTheme()
}

Ошибка:

This ThemeSwitcherWidget widget cannot be marked as needing to build because the framework is
I/flutter (23889): already in the process of building widgets. A widget can be marked as needing to be built during the
I/flutter (23889): build phase only if one of its ancestors is currently building. This exception is allowed because
I/flutter (23889): the framework builds parent widgets before children, which means a dirty descendant will always be

1 Ответ

0 голосов
/ 21 февраля 2019

Для загрузки данных или выполнения блокирующего вызова вы должны использовать FutureBuilder или StreamBuilder (я не очень осведомлен о API Firebase, поэтому не могу сказать, какой использовать, нооба они очень похожи.) Он принимает будущее или поток в качестве аргумента и строит на его основе.Я предполагаю, что вы знаете о будущем API дартс

Вот пример кода, который даст вам некоторое представление.

StreamBuilder<FirebaseUser>(
  stream: FirebaseAuth.instance.onAuthStateChanged,
  builder: (BuildContext context, snapshot) {
    if (snapshot.connectionState == ConnectionState.waiting) {
      return new SplashScreen();
    } else {
      if (snapshot.hasData) {
        return new MainScreen(firestore: firestore, uuid: snapshot.data.uid);
      }
      return new LoginScreen();
    }
  }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...