Как построить виджеты на основе оператора if-else? - PullRequest
0 голосов
/ 28 ноября 2018

Мне нужно построить виджет на основе данных, как показано ниже.Мне нужно сначала запустить CircularProgressIndicator.Моя проблема заключается в том, что мне нужно получить данные с сервера 1. Если на сервере 1 нет данных, остановите CircularProgressIndicator и отобразите виджет «Регистрация не найдена».Если на сервере 1 есть данные, то получите подробные данные с сервера 2. Если на сервере 2 нет данных, отобразите виджет «Временно данные недоступны».Если на Сервере 2 есть Данные, тогда отображается «Виджет данных Сервера 2»

Run loading animation widget (CircularProgressIndicator)
    - Get Data from Server 1
        - If Server 1 Data is okay
            - Get Data from Server 2 using Server 1 Data item value
                - If Server 2 Data is okay
                    - Show Server 2 Data Widget
                - Else
                    - Show “Temporarily Data is not available” Widget
       - Else
            - Show “No Registration Found” Widget

. Я пытаюсь создать логическую переменную, а в основном виджете сборки я пытаюсь показать страницу.Но я получаю сообщение об ошибке и постоянно показываю виджет «Регистрация не найдена», а спустя несколько секунд, когда я собираю данные Сервера 2 с помощью setState, он отображает «Виджет данных Сервера 2».Но он никогда не показывает CircularProgressIndicator.Любая идея, как построить виджеты, основана на операторе if else, как я объяснил выше.

bool _runLoading = true;
bool _data1 = false;
bool _data2 = false;

    return _runLoading == true
        ? _buildLoadingAnimation
        : _data2 == true
          ? _buildServer2Data
          : _buildNoDataFound

1 Ответ

0 голосов
/ 28 ноября 2018

Я думаю, что это может быть так:

Future makeRequest1() {
  // make first request
}

Future makeRequest2() {
  // make second request
}

@override
Widget build(BuildContext context) {
  return FutureBuilder(
    future: makeRequest1(),
      builder: (context, snapshot) {
    if (snapshot.hasData) {

      if ([Server 1 Data is okay]) {
        return FutureBuilder(
          future: makeRequest2(),
            builder: (context, snapshot) {
          if (snapshot.hasData) {

            if ([Server 2 Data is okay]) {
              return Server2DataWidget();
            } else {
              return TemporarilyDataIsNotAvailableWidget();
            }

          } else {
            return CircularProgressIndicator()
          }
        });
      } else {
        return NoRegistrationFoundWidget();
      }

    } else {
      return CircularProgressIndicator();
    }
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...