此方法发送消息并返回 Future<bool>
。我的情况是当状态不是 200 时,快照会包含错误还是会通过抛出异常使整个应用程序崩溃?
Future<bool> sendMessage(String id, String message) async {
/* sendind logic */
if (r.statusCode == 200) {
return true;
} else {
print('Failed to send message. Status code: ${r.statusCode}');
throw Exception('Failed to send message. Status code: ${r.statusCode}');
}
}
然后按照这种方式进行
FutureBuilder(
future: result,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Center(child: Text('Success'));
} else if (snapshot.hasError) {
return Center(child: Text("${snapshot.error}"));
}
return kLoading;
},
),
如果方法返回Future<void>
,我应该如何检查FutureBuilder
未来是否完成?
答案 0 :(得分:0)
AsyncSnapshot 是从与异步计算(例如服务器 API 调用、sqlite 数据库调用、shreadpref 调用等)的最新交互中收到的结果的不可变表示
因此,如果最新计算导致错误(异常),该对象也将在 snapshot.error
字段中出现。所以在你的情况下,代码应该如下所示:
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: result,
builder: (context, snapshot) {
if (snapshot.hasData) {
// Data is avialable. call snapshot.data
}
else if(snapshot.hasError){
// Do error handling
}
else {
// Still Loading. Show progressbar
}
});
}