http_client.dart 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. import 'dart:io';
  2. import 'package:dio/dio.dart';
  3. import 'package:o2_flutter/common/models/api_response.dart';
  4. import 'package:o2_flutter/common/utils/o2_user_manager.dart';
  5. import 'o2_api_manager.dart';
  6. class O2Interceptor extends Interceptor {
  7. @override
  8. onError(DioError err,
  9. ErrorInterceptorHandler handler) {
  10. print('err:${err.response.toString()}');
  11. return super.onError(err, handler);
  12. }
  13. }
  14. class HttpClient {
  15. static final HttpClient instance = HttpClient._internal();
  16. factory HttpClient() {
  17. return instance;
  18. }
  19. HttpClient._internal() {
  20. //初始化
  21. _dio = Dio();
  22. _dio.interceptors.add(O2Interceptor());
  23. }
  24. late Dio _dio;
  25. Dio get dio {
  26. return _dio;
  27. }
  28. ///
  29. /// post方法 json
  30. ///
  31. Future<ApiResponse> post(String url, Map<String, dynamic> data, {bool needToken = true}) async {
  32. Response<dynamic> response = await _dio.post(url, data: data, options: _postJsonOptions(needToken));
  33. return ApiResponse.fromJson(response.data);
  34. }
  35. ///
  36. /// get方法 json
  37. ///
  38. Future<ApiResponse> get(String url, {bool needToken = true}) async {
  39. Response<dynamic> response = await _dio.get(url, options: _getJsonOptions(needToken));
  40. return ApiResponse.fromJson(response.data);
  41. }
  42. ///
  43. /// put 方法 json
  44. ///
  45. Future<ApiResponse> put(String url, Map<String, dynamic> data, {bool needToken = true}) async {
  46. Response<dynamic> response = await _dio.put(url, data: data, options: _putJsonOptions(needToken));
  47. return ApiResponse.fromJson(response.data);
  48. }
  49. ///
  50. /// delete方法 json
  51. ///
  52. Future<ApiResponse> delete(String url, {bool needToken = true}) async {
  53. Response<dynamic> response = await _dio.delete(url, options: _deleteJsonOptions(needToken));
  54. return ApiResponse.fromJson(response.data);
  55. }
  56. ///
  57. /// PUT方法上次文件
  58. ///
  59. Future<ApiResponse> putUploadFile(String url, File file) async {
  60. var fileName = _filename(file);
  61. var formData = FormData.fromMap({
  62. 'file': await MultipartFile.fromFile(file.path, filename: fileName),
  63. });
  64. Response<dynamic> response = await _dio.put(url, data: formData, options: _putJsonOptions(true));
  65. return ApiResponse.fromJson(response.data);
  66. }
  67. String _filename(File file) {
  68. if(file.existsSync()) {
  69. var index = file.path.lastIndexOf(Platform.pathSeparator);
  70. return file.path.substring(index+1, file.path.length);
  71. }
  72. return '';
  73. }
  74. Options _deleteJsonOptions(bool needToken) {
  75. Map<String, String> header = {};
  76. if (needToken && O2UserManager.instance.o2User != null) {
  77. header[O2ApiManager.instance.o2TokenName] =
  78. O2UserManager.instance.o2User?.token == null ? "" : O2UserManager.instance
  79. .o2User?.token ?? '';
  80. }
  81. return Options(
  82. method: 'DELETE',
  83. headers: header,
  84. contentType: ContentType.json.mimeType
  85. );
  86. }
  87. Options _getJsonOptions(bool needToken) {
  88. Map<String, String> header = {};
  89. if (needToken && O2UserManager.instance.o2User != null) {
  90. header[O2ApiManager.instance.o2TokenName] =
  91. O2UserManager.instance.o2User?.token == null ? "" : O2UserManager.instance
  92. .o2User?.token ?? '';
  93. }
  94. return Options(
  95. method: 'GET',
  96. headers: header,
  97. contentType: ContentType.json.mimeType
  98. );
  99. }
  100. Options _postJsonOptions(bool needToken) {
  101. Map<String, String> header = {};
  102. if (needToken && O2UserManager.instance.o2User != null) {
  103. header[O2ApiManager.instance.o2TokenName] =
  104. O2UserManager.instance.o2User?.token == null ? "" : O2UserManager.instance
  105. .o2User?.token ?? '';
  106. }
  107. return Options(
  108. method: 'POST',
  109. headers: header,
  110. contentType: ContentType.json.mimeType
  111. );
  112. }
  113. Options _putJsonOptions(bool needToken) {
  114. Map<String, String> header = {};
  115. if (needToken && O2UserManager.instance.o2User != null) {
  116. header[O2ApiManager.instance.o2TokenName] =
  117. O2UserManager.instance.o2User?.token == null ? "" : O2UserManager.instance
  118. .o2User?.token ?? '';
  119. }
  120. return Options(
  121. method: 'PUT',
  122. headers: header,
  123. contentType: ContentType.json.mimeType
  124. );
  125. }
  126. }