api_provider.dart 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
  2. import 'package:get/get.dart';
  3. import 'package:ftrecruiter/api/interceptors/auth_interceptor.dart';
  4. import 'package:ftrecruiter/api/interceptors/log_res_interceptor.dart';
  5. import 'package:ftrecruiter/api/interceptors/log_req_interceptor.dart';
  6. import 'package:ftrecruiter/comm/constants/api_constants.dart';
  7. import 'package:ftrecruiter/comm/constants/app_constant.dart';
  8. import '../comm/utils/log_utils.dart';
  9. typedef NetSuccessCallback<T> = Function(T data);
  10. typedef NetSuccessListCallback<T> = Function(T data);
  11. typedef NetErrorCallback = Function(int? code, String? msg);
  12. enum HttpMethod { GET, POST }
  13. //基类的Api封装
  14. class ApiProvider extends GetConnect {
  15. //Get请求封装
  16. Future<void> requestNetwork(
  17. String url, {
  18. HttpMethod? method,
  19. Map<String, String>? headers,
  20. Map<String, dynamic>? query,
  21. dynamic body,
  22. NetSuccessCallback<Map<String, dynamic>>? onSuccess,
  23. NetSuccessListCallback<List<dynamic>>? onSuccessList,
  24. NetErrorCallback? onError,
  25. }) async {
  26. var req = method != null && method == HttpMethod.POST
  27. ? post(url, body, headers: headers, query: query)
  28. : get(url, headers: headers, query: query);
  29. final startTime = DateTime.now().millisecond;
  30. var result = await req;
  31. final endTime = DateTime.now().millisecond;
  32. final duration = endTime - startTime;
  33. if (!AppConstant.inProduction) {
  34. Log.d('网络请求耗时 $duration 毫秒, 响应内容 ${result.body}}');
  35. }
  36. if (result.statusCode == 200) {
  37. //网络请求正确之后获取正常的Json-Map
  38. Map<String, dynamic> jsonMap = result.body;
  39. //查看apiCode是否正确
  40. int code = jsonMap['code'];
  41. if (code == 200) {
  42. if (jsonMap['data'] is List<dynamic>) {
  43. //返回数组
  44. List<dynamic> list = jsonMap['data'];
  45. if (onSuccessList != null) {
  46. onSuccessList(list);
  47. }
  48. } else {
  49. //返回对象
  50. if (onSuccess != null) {
  51. onSuccess(jsonMap['data']);
  52. }
  53. }
  54. } else {
  55. //Api错误
  56. if (onError != null) {
  57. onError(jsonMap['code'], jsonMap['message']);
  58. }
  59. //吐司Api错误信息
  60. SmartDialog.compatible.showToast("${jsonMap['message']}");
  61. }
  62. } else {
  63. //网络请求错误
  64. if (onError != null) {
  65. // result.bodyString 错误信息,这里没必要打印,拦截器中有打印的
  66. onError(result.statusCode, result.statusText);
  67. }
  68. //吐司网络请求错误
  69. SmartDialog.compatible.showToast("Request Network Error :${result.statusCode} ${result.statusText}");
  70. }
  71. }
  72. @override
  73. void onInit() {
  74. httpClient.baseUrl = ApiConstants.baseUrl;
  75. // httpClient.addResponseModifier(responseInterceptor);
  76. /// 统一添加身份验证请求头
  77. httpClient.addRequestModifier(authInterceptor);
  78. /// 打印Log(生产模式去除)
  79. if (!AppConstant.inProduction) {
  80. httpClient.addRequestModifier(logReqInterceptor);
  81. }
  82. /// 打印Log(生产模式去除)
  83. // if (!AppConstant.inProduction) {
  84. // httpClient.addResponseModifier(logResInterceptor);
  85. // }
  86. }
  87. }