如何基于if-else语句构建窗口小部件?

时间:2018-11-28 07:37:39

标签: if-statement widget flutter

我需要根据数据构建一个小部件,如下所示。 我需要先运行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

我尝试创建一个布尔变量,并在主构建窗口小部件中尝试显示该页面。但是我一直收到错误消息,并不断显示“未找到注册”小组件,几秒钟后,当我使用setState收集服务器2数据时,它显示了“服务器2数据小组件”。但是它从不显示CircularProgressIndicator。如我上面所解释的,如何基于if else语句构建小部件的任何想法。

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

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

1 个答案:

答案 0 :(得分:1)

我认为可能是这样的:

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();
    }
  });
}