diff --git a/lib/app/network/http_util.dart b/lib/app/network/http_util.dart index 663fb7d..75c4053 100755 --- a/lib/app/network/http_util.dart +++ b/lib/app/network/http_util.dart @@ -128,7 +128,8 @@ class HttpUtil { void updateBaseUrl() { String newBaseUrl = AppConfig.getInstance().baseUrl; if (_dio.options.baseUrl != newBaseUrl) { - KRLogUtil.kr_i('🔄 更新baseUrl: ${_dio.options.baseUrl} -> $newBaseUrl', tag: 'HttpUtil'); + KRLogUtil.kr_i('🔄 更新baseUrl: ${_dio.options.baseUrl} -> $newBaseUrl', + tag: 'HttpUtil'); _dio.options.baseUrl = newBaseUrl; } } @@ -177,7 +178,7 @@ class HttpUtil { try { // 每次请求前更新baseUrl,确保使用最新的域名 updateBaseUrl(); - + if (isShowLoading) { KRCommonUtil.kr_showLoading(); } @@ -240,7 +241,9 @@ class HttpUtil { return null; } } - final userId = _kr_parseUserIdFromToken(KRAppRunData().kr_token.toString()); + + final userId = + _kr_parseUserIdFromToken(KRAppRunData().kr_token.toString()); // 调试:打印请求头 KRLogUtil.kr_i('🔍 请求头: $headers', tag: 'HttpUtil'); KRLogUtil.kr_i('🔍 请求userId: $userId', tag: 'HttpUtil'); @@ -326,18 +329,22 @@ class HttpUtil { } } } - return BaseResponse.fromJson({ - 'code': code, - 'msg': msg, - 'data': {} - }); + if (err.type == DioExceptionType.unknown) { + final _pathOnly = (err.requestOptions.path.isNotEmpty) + ? err.requestOptions.path + : err.requestOptions.uri.path; + msg = '${msg.isNotEmpty ? msg : 'unknown'} ($_pathOnly)'; + KRCommonUtil.kr_showToast('请求失败($_pathOnly)', timeout: 3500); + } + return BaseResponse.fromJson( + {'code': code, 'msg': msg, 'data': {}}); } catch (e) { if (isShowLoading) { KRCommonUtil.kr_hideLoading(); } return BaseResponse.fromJson({ 'code': -90000, - 'msg': e.toString(), + 'msg': '${e.toString()} (${path})', 'data': {} }); } @@ -362,7 +369,8 @@ class MyInterceptor extends Interceptor { @override void onResponse(Response response, ResponseInterceptorHandler handler) { if (kDebugMode) { - print('<<< Response │ ${response.requestOptions.method} │ ${response.statusCode} ${response.statusMessage} │ ${response.requestOptions.uri}'); + print( + '<<< Response │ ${response.requestOptions.method} │ ${response.statusCode} ${response.statusMessage} │ ${response.requestOptions.uri}'); } if (response.data != null) { if (kDebugMode) { @@ -375,7 +383,8 @@ class MyInterceptor extends Interceptor { @override void onError(DioException err, ErrorInterceptorHandler handler) { if (kDebugMode) { - print('<<< Error │ ${err.requestOptions.method} │ ${err.requestOptions.uri}'); + print( + '<<< Error │ ${err.requestOptions.method} │ ${err.requestOptions.uri}'); } if (kDebugMode) { print('Error Type: ${err.type}'); @@ -396,6 +405,8 @@ class MyInterceptor extends Interceptor { /// 自定义简洁 HTTP 拦截器(无边框符号) class _KRSimpleHttpInterceptor extends Interceptor { + static String? _lastPath; + static int _lastTsMs = 0; @override void onRequest(RequestOptions options, RequestInterceptorHandler handler) { if (kDebugMode) { @@ -454,7 +465,8 @@ class _KRSimpleHttpInterceptor extends Interceptor { @override void onResponse(Response response, ResponseInterceptorHandler handler) { if (kDebugMode) { - print('<<< Response │ ${response.requestOptions.method} │ ${response.statusCode} ${response.statusMessage} │ ${response.requestOptions.uri}'); + print( + '<<< Response │ ${response.requestOptions.method} │ ${response.statusCode} ${response.statusMessage} │ ${response.requestOptions.uri}'); } if (response.data != null) { if (kDebugMode) { @@ -514,7 +526,8 @@ class _KRSimpleHttpInterceptor extends Interceptor { @override void onError(DioException err, ErrorInterceptorHandler handler) { if (kDebugMode) { - print('<<< Error │ ${err.requestOptions.method} │ ${err.requestOptions.uri}'); + print( + '<<< Error │ ${err.requestOptions.method} │ ${err.requestOptions.uri}'); } if (kDebugMode) { print('Error Type: ${err.type}'); @@ -529,6 +542,19 @@ class _KRSimpleHttpInterceptor extends Interceptor { print('Response Data: ${err.response?.data}'); } } + if (err.type == DioExceptionType.unknown) { + final path = (err.requestOptions.path.isNotEmpty) + ? err.requestOptions.path + : err.requestOptions.uri.path; + final now = DateTime.now().millisecondsSinceEpoch; + if (!(_lastPath == path && (now - _lastTsMs) < 2000)) { + _lastPath = path; + _lastTsMs = now; + KRCommonUtil.kr_showToast('请求失败($path)', timeout: 3500); + } + KRLogUtil.kr_e('请求失败($path)', + tag: 'HttpUtil', error: err, stackTrace: err.stackTrace); + } handler.next(err); } -} \ No newline at end of file +}