import 'dart:io'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:ftrecruiter/api/interceptors/auth_interceptor.dart'; import 'package:ftrecruiter/api/interceptors/log_res_interceptor.dart'; import 'package:ftrecruiter/api/interceptors/log_req_interceptor.dart'; import 'package:ftrecruiter/comm/constants/api_constants.dart'; import 'package:ftrecruiter/comm/constants/app_constant.dart'; import '../comm/utils/log_utils.dart'; typedef NetSuccessCallback<T> = Function(T data); typedef NetSuccessListCallback<T> = Function(T data); typedef NetErrorCallback = Function(int? code, String? msg); enum HttpMethod { GET, POST } //基类的Api封装 class ApiProvider extends GetConnect { //Get请求封装 Future<void> requestNetwork( String url, { HttpMethod? method, Map<String, String>? headers, Map<String, dynamic>? query, //请求参数 Map<String, File>? paths, //文件上传 NetSuccessCallback<Map<String, dynamic>>? onSuccess, //data数据成功回调 NetSuccessListCallback<List<dynamic>>? onSuccessList, //List数据成功回调 NetErrorCallback? onError, }) async { //封装参数 Future<Response> req; if (method != null && method == HttpMethod.POST) { var map = <String, dynamic>{}; if (query != null || paths != null) { if (query != null) { map.addAll(query); } if (paths != null) { paths.forEach((key, value) { map[key] = MultipartFile( value.readAsBytesSync(), filename: "file", ); }); } } var form = FormData(map); Log.d("Post请求FromData参数,fields:${form.fields.toString()}"); //以Post-Body的方式上传 req = post(url, form, headers: headers); } else { //以Get-Params的方式上传 req = get(url, headers: headers, query: query); } //开始真正请求 final startTime = DateTime.now().millisecond; var result = await req; final endTime = DateTime.now().millisecond; if (!AppConstant.inProduction) { final duration = endTime - startTime; Log.d('网络请求耗时 $duration 毫秒, 响应内容 ${result.body}}'); } if (result.statusCode == 200) { //网络请求正确之后获取正常的Json-Map Map<String, dynamic> jsonMap = result.body; //查看apiCode是否正确 int code = jsonMap['code']; if (code == 200) { if (jsonMap['data'] is List<dynamic>) { //返回数组 List<dynamic> list = jsonMap['data']; if (onSuccessList != null) { onSuccessList(list); } } else { //返回对象 if (onSuccess != null) { onSuccess(jsonMap['data']); } } } else { //Api错误 if (onError != null) { onError(jsonMap['code'], jsonMap['message']); } } } else { //网络请求错误 if (onError != null) { // result.bodyString 错误信息,这里没必要打印,拦截器中有打印的 onError(result.statusCode, result.statusText); } //吐司网络请求错误 SmartDialog.compatible .showToast("Request Network Error :${result.statusCode} ${result.statusText}"); } } @override void onInit() { httpClient.baseUrl = ApiConstants.baseUrl; // httpClient.addResponseModifier(responseInterceptor); /// 统一添加身份验证请求头 httpClient.addRequestModifier(authInterceptor); /// 打印Log(生产模式去除) if (!AppConstant.inProduction) { httpClient.addRequestModifier(logReqInterceptor); } /// 打印Log(生产模式去除) // if (!AppConstant.inProduction) { // httpClient.addResponseModifier(logResInterceptor); // } } }