我正在使用DART的http包发出POST请求.由于某些服务器发出其抛出异常.我已经将代码包装在一个try catch挡路代码中,但它没有捕获异常.

以下是发出网络请求的代码

  class VerificationService {

  static Future<PhoneVerification> requestOtp(
      PhoneNumberPost phoneNumberPostData) async {
    final String postData = jsonEncode(phoneNumberPostData);
    try {
      final http.Response response = await http.post(
        getPhoneRegistrationApiEndpoint(),
        headers: {'content-type': 'Application/json'},
        body: postData,
      );
      if(response.statusCode == 200) {
        return PhoneVerification.fromJson(json.decode(response.body));
      } else {
        throw Exception('Request Error: ${response.statusCode}');
      }
    } on Exception {
      rethrow;
    }
  }
}

使用上述静电方法的单独类的函数.

void onButtonClick() {

try {
    VerificationService.requestOtp(PhoneNumberPost(phone))
        .then((PhoneVerification onValue) {
      //Proceed to next screen
    }).catchError((Error onError){
      enableInputs();
    });
  } catch(_) {
    print('WTF');
  }
}

在上面的方法中,永远不会捕获异常.控制台上从不打印"WTF".我在这里做错了什么?我是dart 新手.

推荐答案

async/await代替then,那么try/catch就可以了

void onButtonClick() async {
  try {
    var value = await VerificationService.requestOtp(PhoneNumberPost(phone))
  } catch(_) {
    enableInputs();
    print('WTF');
  }
}

Dart相关问答推荐

Dart:使用正则表达式从字符串中删除空格

如何在 Flutter 中将 textEditiing 控制器与 Provider 一起使用

如何在 Flutter 中忽略整个文件的 lint 规则?

了解Dart private class

如何在flatter中使用SQFlite更新数据库表

如何在Flutter中正确显示Snackbar?

如何在 Dart 中获取当前脚本的目录?

如何在dart中的多个文件中编写多个单元测试?

Dart:默认 gitignore?

Flutter列表视图底部溢出

Flutter/Dart Uri 没有在 URL 中转义冒号:

在 Flutter 的 TextFormField 中管理事件

Dart 构造函数与静态方法;例如,为什么 int.parse() 不是工厂构造函数?

如何在dart中获得一周的开始或结束

polymer SEO 是否友好?

Flutter/Dart:按第一次出现拆分字符串

Dart 是否支持函数式编程?

Dart: 必须取消 Stream 订阅并关闭 StreamSinks 吗?

Dart 中的 List.shuffle()?

从函数返回多个值