Flutter - отображение диалогового окна предупреждения после загрузки данных и пользовательского интерфейса StreamBuilder.

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

setState () или markNeedsBuild () вызывается во время сборки.

Код:

if (dataSnapshot.hasData) {
            return dataSnapshot.data ? _loadUI(dataSnapshot.data) : _emptyView();
          }

person Farwa    schedule 06.05.2020    source источник


Ответы (1)


Сделать можно так:

void _loadUI(snapshot) {
...

  WidgetsBinding.instance.addPostFrameCallback((_){
    showDialog(
      context: context, 
      ...
    );
  });
}

addPostFrameCallback выполняется во время кадра сразу после постоянных обратных вызовов кадра (когда основной конвейер рендеринга был сброшен).

person imtoori    schedule 06.05.2020
comment
Эй, сейчас я могу показать диалог, но он отображается каждый раз, когда я возобновляю просмотр экрана. Или перейдите на любой другой экран. - person Farwa; 06.05.2020
comment
вы уверены, что не использовали addPersistentFrameCallback? - person imtoori; 06.05.2020
comment
Нет, я воспользовался тем, на что ответил. Подумал, что проблема с вызовом метода сборки каждый раз внутри StreamBuilder, но это еще одна проблема. Спасибо за помощь, дружище. Кроме того, у вас есть справочная ссылка по этому вопросу? - person Farwa; 06.05.2020