gpt4 book ai didi

Flutter FutureBuilder 有数据和连接状态

转载 作者:行者123 更新时间:2023-12-04 15:34:48 27 4
gpt4 key购买 nike

文章Fetch data from the internet显示了 FutureBuilder 的以下代码片段处理快照

FutureBuilder<Post>(
future: post,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data.title);
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}

// By default, show a loading spinner.
return CircularProgressIndicator();
},
);

这似乎还不够可靠。不能有 snapshot.connectionStateConnectionState.donesnapshot.hasDatasnapshot.hasError 的情况> 都是 false 吗? Future 可以合法地返回 null 作为其结果。上面的代码片段会无限期地错误地显示加载指示器,不是吗?

最佳答案

根据文档,snapshot.hasData

Returns whether this snapshot contains a non-null data value.

This can be false even when the asynchronous computation has completed successfully, if the computation did not return a non-null value. For example, a Future will complete with the null value even if it completes successfully.

因此,snapshot.hasData 将在接收到空值时返回 false,确认您在问题中的想法。

snapshot.hasError

Returns whether this snapshot contains a non-null error value.

This is always true if the asynchronous computation's last result was failure.

当服务器响应指示失败的状态(例如带有 error object 的 404、500)时,将获得非空错误值。随附快照或操作返回的任何内容

snapshot.hasError 在请求失败或从未发出请求(在没有网络或网络不佳的情况下)且响应具有非空值的情况下将为 false (将有一个 error object 附加到 ConnectionState.DONE 为真时的快照;即完成时),

snapshot.hasData 为假意味着 ConnectionState.DONE 为真且 snapshot.hasDatanull (包括操作的预期结果类型为 void)

的情况

您问题的答案取决于 error object当请求由于服务器端发生的事情而出错时,是否附加到服务器的响应。如果请求失败,则始终会有一个错误对象附加到响应,因为它从来没有因为网络不好而失败。

如果错误对象为null,那么LoadingIndicator会一直显示

关于Flutter FutureBuilder 有数据和连接状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60106546/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com