Flutter:Dio HTTP 处理错误异常 404

Zef*_*ndo 5 dart flutter

我的期望

它使用 Http.get

我在处理错误 Exception DIO包时遇到问题,我尝试在HTTP包中使用以下代码:

 Future<List<Mosque>> getMahasiswaById(String id) async{
       try {
         var apiRespon = await http.get('$baseURL/mahasiswa/get/id/$id');
        if(apiRespon.statusCode == 200){
            final apiResponJson = json.decode(apiRespon.body);
            return (apiResponJson['data'] as List).map((p)=>Mosque.fromJson(p)).toList();
        }else{
          print(apiRespon.statusCode.toString());
            throw Exception('Failed Load Data with status code ${apiRespon.statusCode}');
        }
       }on Exception catch (e) {
         print(e);
         return null;
       }
  }
Run Code Online (Sandbox Code Playgroud)

但是如果我用DIO进行更改,即使我已经在处理此异常,我的应用程序也会突然崩溃并出现错误异常:

 Future<List<Mosque>> getMahasiswaById(String id) async{
       try {
         var apiRespon = await dio.get('$baseURL/mahasiswa/get/id/$id');
        if(apiRespon.statusCode == 200){
            final apiResponJson = apiRespon.data;
            return (apiResponJson['data'] as List).map((p)=>Mosque.fromJson(p)).toList();
        }else{
          print(apiRespon.statusCode.toString());
            throw Exception('Failed Load Data with status code ${apiRespon.statusCode}');
        }
       }on DioError catch (e) {
         print(e);
         return null;
       }
  }
Run Code Online (Sandbox Code Playgroud)

我的例外:

错误:空
消息:“Http 状态错误 [404]”
响应({“status”:false,“message”:“未找到数据”})

我已经在 github 中打开了问题,但尚未得到解决方案。

谢谢

这是我的例外

Mul*_*dec 6

在您的第一个代码中,使用 http 包,如果状态代码不是 200,您将引发一个Exception

on Exception catch (e) { ... }
Run Code Online (Sandbox Code Playgroud)

但是,在使用 DIO 包的第二个代码中,您引发了相同的问题Exception,但在更改捕获条件时无法捕获它

on DioError catch (e) { ... }
Run Code Online (Sandbox Code Playgroud)

由于异常并未由此引发,因此它会通过您的应用程序传播。