123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- 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);
- // }
- }
- }
|