|
@@ -3,42 +3,49 @@ import 'package:sino_med_cloud/core/constants/api_constants.dart';
|
|
|
import 'package:sino_med_cloud/core/network/interceptors/auth_interceptor.dart';
|
|
import 'package:sino_med_cloud/core/network/interceptors/auth_interceptor.dart';
|
|
|
import 'package:sino_med_cloud/core/network/interceptors/error_interceptor.dart';
|
|
import 'package:sino_med_cloud/core/network/interceptors/error_interceptor.dart';
|
|
|
import 'package:sino_med_cloud/core/network/interceptors/log_interceptor.dart';
|
|
import 'package:sino_med_cloud/core/network/interceptors/log_interceptor.dart';
|
|
|
|
|
+import 'package:sino_med_cloud/core/utils/logger.dart';
|
|
|
|
|
|
|
|
/// Dio 客户端 - 统一网络请求管理
|
|
/// Dio 客户端 - 统一网络请求管理
|
|
|
class DioClient {
|
|
class DioClient {
|
|
|
- static final Dio _dio = Dio(
|
|
|
|
|
- BaseOptions(
|
|
|
|
|
- baseUrl: ApiConstants.baseUrl,
|
|
|
|
|
- connectTimeout: Duration(seconds: ApiConstants.connectTimeout),
|
|
|
|
|
- receiveTimeout: Duration(seconds: ApiConstants.receiveTimeout),
|
|
|
|
|
- sendTimeout: Duration(seconds: ApiConstants.sendTimeout),
|
|
|
|
|
- headers: {
|
|
|
|
|
- ApiConstants.contentType: ApiConstants.applicationJson,
|
|
|
|
|
- },
|
|
|
|
|
- ),
|
|
|
|
|
- );
|
|
|
|
|
-
|
|
|
|
|
- static Dio get dio {
|
|
|
|
|
- // 确保拦截器只添加一次
|
|
|
|
|
- // 拦截器执行顺序:按添加顺序执行
|
|
|
|
|
- // 1. AuthInterceptor - 在请求前添加 Token
|
|
|
|
|
- // 2. LogInterceptor - 记录请求和响应日志
|
|
|
|
|
- // 3. ErrorInterceptor - 统一处理错误
|
|
|
|
|
- if (_dio.interceptors.isEmpty) {
|
|
|
|
|
- _dio.interceptors.addAll([
|
|
|
|
|
- AuthInterceptor(), // 认证拦截器(自动添加 Token)
|
|
|
|
|
- LogInterceptor(), // 日志拦截器(使用 AppLogger 记录日志)
|
|
|
|
|
- ErrorInterceptor(), // 错误拦截器(统一错误处理)
|
|
|
|
|
- ]);
|
|
|
|
|
- // 调试:确认拦截器已添加
|
|
|
|
|
- assert(_dio.interceptors.length == 3, '拦截器应该添加3个');
|
|
|
|
|
- }
|
|
|
|
|
- return _dio;
|
|
|
|
|
|
|
+ // 使用一个内部方法来创建和配置 Dio 实例
|
|
|
|
|
+ static final Dio _dio = _createDio();
|
|
|
|
|
+
|
|
|
|
|
+ static Dio _createDio() {
|
|
|
|
|
+ AppLogger.d('DioClient - 开始创建 Dio 实例并配置拦截器');
|
|
|
|
|
+ final dio = Dio(
|
|
|
|
|
+ BaseOptions(
|
|
|
|
|
+ baseUrl: ApiConstants.baseUrl,
|
|
|
|
|
+ connectTimeout: Duration(seconds: ApiConstants.connectTimeout),
|
|
|
|
|
+ receiveTimeout: Duration(seconds: ApiConstants.receiveTimeout),
|
|
|
|
|
+ sendTimeout: Duration(seconds: ApiConstants.sendTimeout),
|
|
|
|
|
+ headers: {
|
|
|
|
|
+ ApiConstants.contentType: ApiConstants.applicationJson,
|
|
|
|
|
+ },
|
|
|
|
|
+ ),
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ // 立即添加拦截器
|
|
|
|
|
+ dio.interceptors.addAll([
|
|
|
|
|
+ AuthInterceptor(), // 认证拦截器
|
|
|
|
|
+ LogInterceptor(), // 日志拦截器
|
|
|
|
|
+ ErrorInterceptor(), // 错误拦截器
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ AppLogger.d('DioClient - Dio 实例初始化完成,拦截器数量: ${dio.interceptors.length}');
|
|
|
|
|
+ return dio;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 暴露 dio 实例
|
|
|
|
|
+ static Dio get dio => _dio;
|
|
|
|
|
+
|
|
|
/// 重置 Dio 实例(用于重新配置)
|
|
/// 重置 Dio 实例(用于重新配置)
|
|
|
static void reset() {
|
|
static void reset() {
|
|
|
_dio.interceptors.clear();
|
|
_dio.interceptors.clear();
|
|
|
|
|
+ _dio.interceptors.addAll([
|
|
|
|
|
+ AuthInterceptor(),
|
|
|
|
|
+ LogInterceptor(),
|
|
|
|
|
+ ErrorInterceptor(),
|
|
|
|
|
+ ]);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// ==================== GET 请求 ====================
|
|
// ==================== GET 请求 ====================
|