提交 f1844f32 authored 作者: 史晓晨's avatar 史晓晨

feat:网络请求异常处理

上级 43d99686
...@@ -40,7 +40,7 @@ class _DioWidgetTestState extends State<DioWidgetTest> { ...@@ -40,7 +40,7 @@ class _DioWidgetTestState extends State<DioWidgetTest> {
errorCallback: (code, msg) { errorCallback: (code, msg) {
debugPrint("=====errorCallback"); debugPrint("=====errorCallback");
setState(() { setState(() {
_result = msg!; _result = "code: $code meg = $msg";
}); });
}, },
); );
......
...@@ -105,15 +105,11 @@ abstract class BaseDio { ...@@ -105,15 +105,11 @@ abstract class BaseDio {
); );
onNetSuccess(response, successCallback, errorCallback); onNetSuccess(response, successCallback, errorCallback);
} on DioException catch (e) { } on DioException catch (e) {
if (e.response != null) { var result = await _handleHttpException(e.response);
logger.e( // result 为null时,已调用重新登录方法 onLoginExpire,onLoginExpire需重写
"请求错误:${e.response!.statusCode} ${e.response!.requestOptions.path}"); if (result != null) {
if (await _httpExceptionReLogin(e.response)) return; await errorCallback?.call(result["code"], result["message"]);
} else {
// Something happened in setting up or sending the request that triggered an Error
logger.e("请求错误:${e.error}");
} }
await errorCallback?.call(500, "服务器请求错误");
} }
} }
...@@ -150,17 +146,11 @@ abstract class BaseDio { ...@@ -150,17 +146,11 @@ abstract class BaseDio {
return {"code": 400, "message": "数据解析错误"}; return {"code": 400, "message": "数据解析错误"};
} }
} on DioException catch (e) { } on DioException catch (e) {
if (e.response != null) { var result = await _handleHttpException(e.response);
logger.e( // result 为null时,已调用重新登录方法 onLoginExpire,onLoginExpire需重写
"请求错误:${e.response!.statusCode} ${e.response!.requestOptions.path}"); if (result != null) {
if (await _httpExceptionReLogin(e.response)) { return result;
return {"code": 401, "message": "登录过期,请重新登录"};
}
} else {
// Something happened in setting up or sending the request that triggered an Error
logger.e("请求错误:${e.error}");
} }
return {"code": 500, "message": "服务器请求错误"};
} }
} }
...@@ -193,20 +183,25 @@ abstract class BaseDio { ...@@ -193,20 +183,25 @@ abstract class BaseDio {
} }
} }
/// 网关拦截重新登录 /// 处理http异常
/// http状态码为401 & 返回体code为-100时,需重新登录 {"code":-100,"msg":"权限变更或登录过期,请重新登录"} Future<Map<String, dynamic>?> _handleHttpException(Response? response) async {
Future<bool> _httpExceptionReLogin(Response? response) async { if (response == null) {
var httpCode = response?.statusCode; return {"code": -500, "message": "网络请求错误,请稍后重试"};
var httpData = response?.data; }
if (httpData != null && httpData != "") { var httpCode = response.statusCode; // httpCode
var httpData = response.data; // httpData
try {
var httpResult = await jsonTransformer.parseJson(httpData); var httpResult = await jsonTransformer.parseJson(httpData);
if (httpCode == 401 && httpResult["code"]?.toString() == "-100") { if (httpCode == 401 && httpResult["code"]?.toString() == "-100") {
logger.e("登录过期:${httpResult['msg']}"); logger.e("登录过期:${httpResult['msg']}");
onLoginExpire(); onLoginExpire();
return true; return null;
} }
return {"code": httpCode, "message": httpResult['msg'] ?? "网络请求错误,请稍后重试"};
} on Exception catch (e) {
logger.e("请求错误:${e.toString()}");
} }
return false; return {"code": httpCode ?? -500, "message": "网络请求错误,请稍后重试"};
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论