首页 > 解决方案 > 为什么 snapshot.data 在 FutureBuilder 中返回 null?

问题描述

void main() {
  FutureBuilder<bool>(
    future: f(),
    builder: (_, AsyncSnapshot<bool> snapshot) {
      bool data = snapshot.data; // Error
      return Container();
    },
  );
}

Future<bool> f() async => true;

bool在所有地方都使用过,因此我snapshot.data也应该返回 abool但它返回了bool?,为什么会这样?

标签: flutterdartdart-null-safety

解决方案


如果你看到数据的实现,它是:

T? get data;

数据返回类型为T?而不是的原因T是错误。如果你的返回错误怎么办Future,在这种情况下你会收到一个空值。你应该像这样使用它:

FutureBuilder<bool>(
  future: f(),
  builder: (_, AsyncSnapshot<bool> snapshot) {
    if (!snapshot.hasError) {
      bool data = snapshot.data!;
    }
    return Container();
  },
)

推荐阅读