为什么 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();
},
)
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();
},
)