出现场景
使用Dio
时,网络请求可能会出现异常,需要用try catch捕获。
捕获代码如下
try { var response = await _dio!.get<T>("/list", queryParameters: {"key":"value"}); print(response.data); } catch (e) { var exception = e as exception; print(exception); }
网络请求时出现以下异常信息:
[VERBOSE-2:ui_dart_state.cc(198)] Unhandled Exception: type '_TypeError' is not a subtype of type 'Exception' in type cast
解决方案
因为catch到的e是dynamic
,有可能是Exception,有可能是Error,所以无法做强制转换,需要对这两种类型做不同的操作。
我们可以分开处理Exception,或者统一处理时先判断类型.
分开处理(推荐)
try{ } on Exception catch (e){ /// 捕获的类型是Exception } on Error catch (e){ /// 捕获的类型是Error }
判断类型
try{ ... } catch (e){ if (e is Exception){ /// 处理Exception ... } else if (e is Error){ /// 处理Error ... } }