文章Fetch data from the internet显示了FutureBuilder处理以下tf.Tensor
的以下代码段。
snapshot
这似乎还不够扎实。如果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.connectionState
但ConnectionState.done
和snapshot.hasData
都是snapshot.hasError
时,会不会存在?未来可以合法地返回false
作为结果。然后,上面的代码段会无限期地错误地显示加载指示器,不是吗?
答案 0 :(得分:1)
根据文档snapshot.hasData
返回此快照是否包含非空数据值。
即使异步计算成功完成,如果计算未返回非null值,也可能为false。例如,即使Future成功完成,它也将以空值完成。
因此,handleSubmit = (e) => {
e.preventDefault()
console.log("Added")
const target = e.target
this.setState((prevState) => {
return {
items: prevState.items.concat([target.input.value]) // This works. Why?
}
})
}
在收到空值时将返回false,从而确认您对问题的想法。
返回此快照是否包含非空错误值。
如果异步计算的最后结果是失败,则总是如此。
当服务器以指示失败的状态进行响应时,将获得非null的错误值,例如带有快照的404、500和error object或从操作返回的任何内容
snapshot.hasData
在失败的请求或从未发出请求的情况下(在没有网络或网络状况不佳的情况下)且响应的值非空(将会有一个error object附加到snapshot.hasError
上的快照为true;即完成时),
ConnectionState.DONE
为假表示snapshot.hasData
为真,ConnectionState.DONE
为snapshot.hasData
(包括操作的预期结果为null
类型的情况)
问题的答案取决于是否由于服务器端发生了错误而导致请求错误而在服务器的响应上附加了error object。如果由于由于网络故障而从未发出请求而失败,则响应中始终会有一个错误对象。
如果错误对象为null,则LoadingIndicator将无限期显示