【问题标题】:How to get first Future in Futurebuilder using Future.wait with null-safety如何使用具有空安全性的 Future.wait 在 Futurebuilder 中获得第一个 Future
【发布时间】:2021-11-03 11:48:55
【问题描述】:

我有一个 Futurebuilder,我在其中调用多个期货。我想获得第一个未来数据,但我找不到方法来告诉 null-safety 这不能为 null。

FutureBuilder(
        future:
            Future.wait([contactInformationController.companiesFuture.value]),
        builder: (context, snapshot) {
          switch (snapshot.connectionState) {
            case ConnectionState.none:
            case ConnectionState.active:
            case ConnectionState.waiting:
              return SizedBox(height: 600, child: LoadingIndicator());
            case ConnectionState.done:
              if (snapshot.hasError) {
                return SizedBox(
                    width: double.infinity,
                    height: 600,
                    child: Center(
                        child: Text("fetcherror".tr,
                            style: Theme.of(context).textTheme.subtitle1!)));
              }

              contactInformationController.companiesData.value = snapshot.data[0]!;

...

它给了我这个错误:

方法'[]'不能被无条件调用,因为接收者 可以为“null”。

如何使这段代码在 null 安全的情况下工作:

contactInformationController.companiesData.value = snapshot.data[0]!;

【问题讨论】:

  • snapshot.data[0]! 断言snapshot.data 的第一个元素不为空。该错误告诉您snapshot.data 本身可能为空。如果您确定不是,那么您可以使用snapshot.data![0]
  • 检查snapshot.hasData 是否为真是个好主意,然后您就可以安全地按照前面的评论所说的去做。

标签: flutter dart dart-null-safety


【解决方案1】:

我已经解决了。使用 Future.wait 时。快照返回对象数据。你需要转换它然后调用它。

像这样:

contactInformationController.companiesData.value = (snapshot.data! as List)[0]
                  

【讨论】:

    猜你喜欢
    • 2021-02-14
    • 2023-02-22
    • 2021-12-08
    • 2021-11-09
    • 1970-01-01
    • 2014-07-21
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多