network_module.dart 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import 'package:dio/dio.dart';
  2. import 'package:electronic_assistant/data/consts/build_config.dart';
  3. import 'package:electronic_assistant/utils/stream_dio_log_interceptor.dart';
  4. import 'package:pretty_dio_logger/pretty_dio_logger.dart';
  5. import '../consts/Constants.dart';
  6. class _NetworkModule {
  7. static Dio _createDefaultDio() {
  8. Dio dio = Dio(BaseOptions(
  9. /// 发送数据的超时设置。
  10. ///
  11. /// 超时时会抛出类型为 [DioExceptionType.sendTimeout] 的
  12. /// [DioException]。
  13. ///
  14. /// `null` 或 `Duration.zero` 即不设置超时。
  15. //Duration ? sendTimeout;
  16. /// 接收数据的超时设置。
  17. ///
  18. /// 这里的超时对应的时间是:
  19. /// - 在建立连接和第一次收到响应数据事件之前的超时。
  20. /// - 每个数据事件传输的间隔时间,而不是接收的总持续时间。
  21. ///
  22. /// 超时时会抛出类型为 [DioExceptionType.receiveTimeout] 的
  23. /// [DioException]。
  24. ///
  25. /// `null` 或 `Duration.zero` 即不设置超时。
  26. //Duration ? receiveTimeout;
  27. /// 可以在 [Interceptor]、[Transformer] 和
  28. /// [Response.requestOptions] 中获取到的自定义对象。
  29. //Map<String, dynamic> ? extra;
  30. /// HTTP 请求头。
  31. ///
  32. /// 请求头的键是否相等的判断大小写不敏感的。
  33. /// 例如:`content-type` 和 `Content-Type` 会视为同样的请求头键。
  34. //Map<String, dynamic> ? headers;
  35. /// 是否保留请求头的大小写。
  36. ///
  37. /// 默认值为 false。
  38. ///
  39. /// 该选项在以下场景无效:
  40. /// - XHR 不支持直接处理。
  41. /// - 按照 HTTP/2 的标准,只支持小写请求头键。
  42. //bool ? preserveHeaderCase;
  43. /// 表示 [Dio] 处理请求响应数据的类型。
  44. ///
  45. /// 默认值为 [ResponseType.json]。
  46. /// [Dio] 会在请求响应的 content-type
  47. /// 为 [Headers.jsonContentType] 时自动将响应字符串处理为 JSON 对象。
  48. ///
  49. /// 在以下情况时,分别使用:
  50. /// - `plain` 将数据处理为 `String`;
  51. /// - `bytes` 将数据处理为完整的 bytes。
  52. /// - `stream` 将数据处理为流式返回的二进制数据;
  53. //ResponseType? responseType;
  54. /// 请求的 content-type。
  55. ///
  56. /// 请求默认的 `content-type` 会由 [ImplyContentTypeInterceptor]
  57. /// 根据发送数据的类型推断。它可以通过
  58. /// [Interceptors.removeImplyContentTypeInterceptor] 移除。
  59. //String? contentType;
  60. /// 判断当前返回的状态码是否可以视为请求成功。
  61. //ValidateStatus? validateStatus;
  62. /// 是否在请求失败时仍然获取返回数据内容。
  63. ///
  64. /// 默认为 true。
  65. //bool? receiveDataWhenStatusError;
  66. /// 参考 [HttpClientRequest.followRedirects]。
  67. ///
  68. /// 默认为 true。
  69. //bool? followRedirects;
  70. /// 当 [followRedirects] 为 true 时,指定的最大重定向次数。
  71. /// 如果请求超出了重定向次数上线,会抛出 [RedirectException]。
  72. ///
  73. /// 默认为 5。
  74. //int? maxRedirects;
  75. /// 参考 [HttpClientRequest.persistentConnection]。
  76. ///
  77. /// 默认为 true。
  78. //bool? persistentConnection;
  79. /// 对请求内容进行自定义编码转换。
  80. ///
  81. /// 默认为 [Utf8Encoder]。
  82. //RequestEncoder? requestEncoder;
  83. /// 对请求响应内容进行自定义解码转换。
  84. ///
  85. /// 默认为 [Utf8Decoder]。
  86. //ResponseDecoder? responseDecoder;
  87. /// 当请求参数以 `x-www-url-encoded` 方式发送时,如何处理集合参数。
  88. ///
  89. /// 默认为 [ListFormat.multi]。
  90. //ListFormat? listFormat;
  91. ));
  92. dio.interceptors.add(PrettyDioLogger(
  93. requestHeader: true,
  94. requestBody: true,
  95. responseBody: true,
  96. responseHeader: true,
  97. enabled: BuildConfig.isDebug,
  98. ));
  99. return dio;
  100. }
  101. static Dio _createStreamDio() {
  102. Dio streamDio = Dio(BaseOptions(
  103. responseType: ResponseType.stream,
  104. ));
  105. streamDio.interceptors.add(StreamDioLogInterceptor());
  106. return streamDio;
  107. }
  108. static Dio _createFileDio() {
  109. Dio dio = Dio(BaseOptions(
  110. sendTimeout: const Duration(seconds: 60 * 30), //半个小时
  111. ));
  112. dio.interceptors.add(PrettyDioLogger(
  113. requestHeader: true,
  114. requestBody: true,
  115. responseBody: true,
  116. responseHeader: true,
  117. enabled: BuildConfig.isDebug,
  118. ));
  119. return dio;
  120. }
  121. }
  122. final defaultDio = _NetworkModule._createDefaultDio();
  123. final streamDio = _NetworkModule._createStreamDio();
  124. final fileDio = _NetworkModule._createFileDio();