Flutter 颤振FutureBuilder具有数据和连接状态

Flutter 颤振FutureBuilder具有数据和连接状态,flutter,future,Flutter,Future,本文显示了用于处理快照的以下代码片段 FutureBuilder<Post>( future: post, builder: (context, snapshot) { if (snapshot.hasData) { return Text(snapshot.data.title); } else if (snapshot.hasError) { return Text("${snapshot.error}"); }

本文显示了用于处理
快照的以下代码片段

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();
  },
);
FutureBuilder(
未来:邮政,
生成器:(上下文,快照){
if(snapshot.hasData){
返回文本(快照、数据、标题);
}else if(snapshot.hasrerror){
返回文本(“${snapshot.error}”);
}
//默认情况下,显示加载微调器。
返回循环ProgressIndicator();
},
);

这似乎还不够牢固。当
snapshot.connectionState
connectionState.done
snapshot.hasData
snapshot.hasError
均为
false
时,是否会出现这种情况?未来可以合法地返回
null
,作为其结果。上面的代码片段会无限期地错误地显示加载指示器,不是吗?

根据文档

返回此快照是否包含非空数据值

即使异步计算已成功完成,如果计算未返回非null值,这也可能是错误的。例如,即使Future成功完成,它也将使用null值完成

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

返回此快照是否包含非空错误值

如果异步计算的最后一个结果是失败,则始终如此

当服务器以指示故障的状态响应时,将获得一个非空错误值,例如404、500,并伴随快照或从操作返回的任何内容

snapshot.hasError
对于失败的请求或从未发出请求(在无网络或网络不良的情况下)且响应具有非空值(在
ConnectionState.DONE
上的快照将附加为true;即在完成时)将为false

snapshot.hasData
为false表示
ConnectionState.DONE
为true,而
snapshot.hasData
null
(包括操作的预期结果为
void
类型的情况)

您的问题的答案取决于当请求由于服务器端发生的某些事情而出错时,是否将附加到来自服务器的响应。如果请求因网络故障而从未发出而失败,则响应始终会附加一个错误对象

如果错误对象为null,则LoadingIndicator将无限期显示