выполнить навигацию внутри метода сборки виджета? - флаттер - PullRequest
0 голосов
/ 13 февраля 2020

Быстрый вопрос: как выполнить навигацию внутри метода построения виджета?

  • Я занимаюсь разработкой приложения Flutter.
  • Я использую архитектуру Blo c ,

У меня есть экран с формой создания. Когда пользователь нажимает кнопку, он вызывает API REST. Пока выполняется вызов, я показываю круговой прогресс. Когда процесс завершится, я хочу, чтобы экран выскочил (используя навигацию).

Для отображения статуса задания я использую Stream в блоке blo c и StreamBuilder в виджете. Поэтому я хочу сделать что-то вроде этого:

return StreamBuilder<Job<T>>(
    stream: jobstream,
    builder: (context, snapshot) {
      if (snapshot.hasData) {
        if (snapshot.data.jobStatus == JobStatus.progress)
          // job being executed, display progress
          return Center(child: CircularProgressIndicator());

        else if (snapshot.data.jobStatus == JobStatus.success)
          Navigator.pop(context); // Problem here!
          return Center(child: CircularProgressIndicator());
      } else {
          return DisplayForm();
      }
    });

У меня проблемы со строкой: Navigator.pop (context); Поскольку навигация не разрешена во время сборки.

Как я могу сделать эту навигацию?

Мое решение пакостное использует следующую функцию, но уродливо:

  static void deferredPop(BuildContext context) async{
    Future.delayed(
      Duration(milliseconds: 1),
        () => Navigator.pop(context)
     );
   }

1 Ответ

0 голосов
/ 13 февраля 2020

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

WidgetsBinding.instance.addPostFrameCallback((_) => Navigator.pop(context));
...