Men*_*elG 3 future dart flutter flutter-futurebuilder
我正在使用 Flutter FutureBuilder,并发现了一种模式,在 渲染小部件之前检查 和snapshot.hasData : snapshot.data != null
FutureBuilder(
future: future,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData && snapshot.data != null) {
return widgetToBuild;
} else if (snapshot.hasError) {
return Icon(Icons.error_outline);
} else {
return CircularProgressIndicator();
}
}
)
Run Code Online (Sandbox Code Playgroud)
在检查 的源代码后AsyncSnapshot,我注意到被hasData定义为trueif datais not null:
bool get hasData => data != null;
Run Code Online (Sandbox Code Playgroud)
snapshot.hasData鉴于此实现,检查和是否多余snapshot.data != null?还不够snapshot.hasData,因为它本质上检查是否data不是null?
我很好奇是否存在两种检查都可能是必要的情况,或者这是否只是FutureBuilder开发人员在使用中经常错误的常见误解。
来自AsyncSnapshot#hasData()提交fbd4bb9。
在第 34545 期中,围绕这个问题展开了一场激烈的争论:
如果我们停止将
data == null初始数据与此讨论完全混为一谈,而只是进行一个小的突破性更改,即在 hasError 为 true 时使数据获取器抛出异常,会怎么样?
我也会摆脱requireData并让调用者自己检查 null。这对我来说确实听起来不错 - 但有一个不便:
data == null初始数据的合并有点融入到hasDatagetter 中的 API 中(它只是检查数据是否为 null,但 null 可能是有效数据......)。我想知道我们是否也
应该摆脱并告诉人们如果你想知道数据是否不为空,只需检查数据?hasData
我怀疑这就是为什么您会看到如下代码:
FutureBuilder(
future: future,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
if (snapshot.data != null) {
return widgetToBuild; // Data is available and not null
} else {
// Handle null data scenario, e.g., show a message
return Text("No data available");
}
} else if (snapshot.hasError) {
return Icon(Icons.error_outline); // An error occurred
}
return CircularProgressIndicator(); // Still waiting for data
}
)
Run Code Online (Sandbox Code Playgroud)
但在目前的状态下,它仍然是多余的。
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |