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

feat:网络请求异常处理

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