api_provider.dart 2.8 KB

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