dio_client.dart 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import 'package:dio/dio.dart';
  2. import 'package:pretty_dio_logger/pretty_dio_logger.dart';
  3. import 'package:sino_med_cloud/core/constants/api_constants.dart';
  4. import 'package:sino_med_cloud/core/network/interceptors/auth_interceptor.dart';
  5. import 'package:sino_med_cloud/core/network/interceptors/error_interceptor.dart';
  6. import 'package:sino_med_cloud/core/network/interceptors/log_interceptor.dart';
  7. /// Dio 客户端 - 统一网络请求管理
  8. class DioClient {
  9. static final Dio _dio = Dio(
  10. BaseOptions(
  11. baseUrl: ApiConstants.baseApiUrl,
  12. connectTimeout: Duration(seconds: ApiConstants.connectTimeout),
  13. receiveTimeout: Duration(seconds: ApiConstants.receiveTimeout),
  14. sendTimeout: Duration(seconds: ApiConstants.sendTimeout),
  15. headers: {
  16. ApiConstants.contentType: ApiConstants.applicationJson,
  17. },
  18. ),
  19. );
  20. static Dio get dio {
  21. // 确保拦截器只添加一次
  22. if (_dio.interceptors.isEmpty) {
  23. _dio.interceptors.addAll([
  24. AuthInterceptor(), // 认证拦截器(添加 Token)
  25. ErrorInterceptor(), // 错误拦截器(统一错误处理)
  26. PrettyDioLogger( // 日志拦截器(美化输出)
  27. requestHeader: true,
  28. requestBody: true,
  29. responseBody: true,
  30. responseHeader: false,
  31. error: true,
  32. compact: true,
  33. ),
  34. // 如果需要自定义日志,可以使用 LogInterceptor 替代 PrettyDioLogger
  35. // LogInterceptor(),
  36. ]);
  37. }
  38. return _dio;
  39. }
  40. /// 重置 Dio 实例(用于重新配置)
  41. static void reset() {
  42. _dio.interceptors.clear();
  43. }
  44. }