抛出异常时快照会包含错误吗?

时间:2021-03-17 08:32:48

标签: flutter dart

此方法发送消息并返回 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 未来是否完成?

1 个答案:

答案 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
          }
        });
  }