flutter - 如何从 Dart 中的 future 返回错误?

在我的 flutter 应用程序中,我有一个处理 http 请求并返回解码数据的 future 。但是如果 status code != 200 可以通过 .catchError() 处理程序获得,我希望能够发送错误。

future 在此:

Future<List> getEvents(String customerID) async {
  var response = await http.get(
    Uri.encodeFull(...)
  );

  if (response.statusCode == 200){
    return jsonDecode(response.body);
  }else{
    // I want to return error here 
  }
}

当我调用这个函数时,我希望能够得到如下错误:

getEvents(customerID)
.then(
  ...
).catchError(
  (error) => print(error)
);

最佳答案

抛出错误/异常:

您可以使用 returnthrow 来抛出错误或异常。

  • 使用return:
    Future<void> foo() async {
      if (someCondition) {
        return Future.error('FooError');
      }
    }
    
  • 使用 throw:
    Future<void> bar() async {
      if (someCondition) {
        throw Exception('BarException');
      }
    }
    

捕获错误/异常:

您可以使用 catchErrortry-catch block 来捕获错误或异常。

  • 使用catchError:
    foo().catchError(print);
    
  • 使用try-catch:
    try {
      await bar();
    } catch (e) {
      print(e);
    }
    

https://stackoverflow.com/questions/54474689/

相关文章:

dart - Flutter:如何检测键盘按Enter?

flutter - 如何在 flutter 应用程序中无上下文导航?

android - Flutter 从 1.5 升级到 1.7.4 后 APK 大小翻倍?

dart - 向 Flutter 应用添加不同的路由/屏幕

dart - 成功验证后不会调用 Flutter TextFormField onSave()

google-maps - 使用 Flutter Google Maps 插件自定义标记

database - 如何在 sqflite 的数据库中创建多个表?

android-studio - 在指定位置找不到 Flutter SDK - 在 Android

flutter - 获取相对于小部件的点击位置

dart - 如何使用 flutter 删除 Firestore 文档中的字段