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
也应该返回 bool
但它返回 bool?
,为什么会这样?
答案 0 :(得分:2)
如果看到数据的实现,就是:
T? get data;
数据返回类型为 T?
而不是 T
的原因是错误。如果您的 Future
返回错误怎么办,在这种情况下您会收到一个空值。你应该像这样使用它:
FutureBuilder<bool>(
future: f(),
builder: (_, AsyncSnapshot<bool> snapshot) {
if (!snapshot.hasError) {
bool data = snapshot.data!;
}
return Container();
},
)
答案 1 :(得分:1)
那是因为data
的签名是final T? data
,见https://api.flutter.dev/flutter/widgets/AsyncSnapshot/data.html这是有道理的,因为当你的异步计算还没有产生结果,或者发生错误时,没有要返回的数据。