Browse Source

fix(auth_interceptor): 优化错误处理逻辑并抑制特定接口的snackbar

添加特定接口的错误提示抑制逻辑,避免不必要的用户干扰
统一并改进HTTP错误响应消息的映射,提供更友好的本地化提示
移除重复的snackbar显示代码,简化异常处理流程
newdev_shunjiawei
lxm 8 months ago
parent
commit
bda611aff0
  1. 70
      lib/data/services/network/auth_interceptor.dart

70
lib/data/services/network/auth_interceptor.dart

@ -11,6 +11,35 @@ class AuthInterceptor extends Interceptor {
final GetStorage _storage = GetStorage();
final String _signKey = '@214%67g15q4*67m17#4l67!'; // 替换为实际的密钥
bool _shouldSuppressErrorSnackbar(DioException err) {
final path = err.requestOptions.path;
return path == '/api/home/user_getinfo';
}
bool _shouldSuppressBusinessErrorSnackbar(RequestOptions options) {
final path = options.path;
return path == '/api/home/user_getinfo';
}
String _mapBadResponseMessage(DioException err) {
final statusCode = err.response?.statusCode;
final statusMessage = (err.response?.statusMessage ?? '').toLowerCase();
if (statusCode == 401 || statusCode == 403) {
return 'loginExpiredPleaseRelogin'.tr;
}
if (statusCode == 404 || statusMessage.contains('record not found')) {
return 'requestedResourceNotFound'.tr;
}
if (statusCode != null && statusCode >= 500) {
return 'serverTemporarilyUnavailable'.tr;
}
return 'unknownError'.tr;
}
@override
void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
var jsonString = _storage.read<String>("logintoken");
@ -37,9 +66,20 @@ class AuthInterceptor extends Interceptor {
} else {
response.data = null;
handler.next(response);
if (_shouldSuppressBusinessErrorSnackbar(response.requestOptions)) {
return;
}
final rawMessage = entity.message ?? '';
final lowerMessage = rawMessage.toLowerCase();
final displayMessage = lowerMessage.contains('record not found')
? 'requestedResourceNotFound'.tr
: (entity.message ?? 'unknownError'.tr);
Get.snackbar(
'error'.tr, // 错误
entity.message ?? 'unknownError'.tr,
displayMessage,
snackPosition: SnackPosition.TOP,
backgroundColor: Colors.red.withOpacity(0.1),
colorText: Colors.red,
@ -93,24 +133,18 @@ class AuthInterceptor extends Interceptor {
}
case DioExceptionType.badResponse:
{
try {
String? errMsg = err.response?.statusMessage;
Get.snackbar(
'error'.tr, // 错误
errMsg ?? 'unknownError'.tr,
snackPosition: SnackPosition.TOP,
backgroundColor: Colors.red.withOpacity(0.1),
colorText: Colors.red,
);
} on Exception catch (_) {
Get.snackbar(
'error'.tr, // 错误
'unknownError'.tr,
snackPosition: SnackPosition.TOP,
backgroundColor: Colors.red.withOpacity(0.1),
colorText: Colors.red,
);
if (_shouldSuppressErrorSnackbar(err)) {
handler.next(err);
return;
}
Get.snackbar(
'error'.tr, // 错误
_mapBadResponseMessage(err),
snackPosition: SnackPosition.TOP,
backgroundColor: Colors.red.withOpacity(0.1),
colorText: Colors.red,
);
}
default:
{

Loading…
Cancel
Save