为啥 Future.Builder 中的快照从不出错?
Posted
技术标签:
【中文标题】为啥 Future.Builder 中的快照从不出错?【英文标题】:Why snapshot inside Future.Builder has never errors?为什么 Future.Builder 中的快照从不出错? 【发布时间】:2021-10-25 19:23:07 【问题描述】:为 FutureBuilder 生成 snapshot.error 的正确方法是什么? 我有一个单例来处理 http 请求,有一个方法:
try
var response = await http.get(url);
// Success
if (response.statusCode == 200)
[...]
// Failure
else
return Future.error("Error");
catch (e)
return Future.error("Error");
另一方面,我有一个带有 FutureBuilder 的小部件:
FutureBuilder(
future: new Future(() => Singleton().request()),
builder: (context, snapshot)
if (snapshot.hasData)
// snapshot has ALWAYS data even if I return error
else if(snapshot.hasError)
// never reach this statement
);
我做错了什么?您能否指出我处理错误的正确方向?我想避免回调 catchError()。提前致谢。
【问题讨论】:
【参考方案1】:这是因为如果快照有错误,则意味着快照有数据,因此永远不会到达 else if 语句。您应该先检查是否有任何错误,然后再检查数据。
像这样 -
FutureBuilder(
future: new Future(() => Singleton().request()),
builder: (context, snapshot)
if (snapshot.hasError)
// do something
else if(snapshot.hasData)
// do something
);
【讨论】:
以上是关于为啥 Future.Builder 中的快照从不出错?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 TypeScript 在使用 concat 减少数组时会推断出“从不”类型?
如何使用 Flutter 数据模型和 Future Builder