为什么 snapshot.data returns 在 FutureBuilder 中为空?

Why snapshot.data returns null in FutureBuilder?

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 也应该 return 一个 bool 但它 return 是 bool? ,为什么会这样?

那是因为data的签名是final T? data,看https://api.flutter.dev/flutter/widgets/AsyncSnapshot/data.html这是有道理的,因为当你的异步计算还没有产生结果,或者发生了错误return.

没有数据

如果看到执行数据,是:

T? get data;

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

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