Sfoglia il codice sorgente

网络请求的封装修改2

liukai 1 anno fa
parent
commit
1e3ad8b4f6

+ 47 - 16
lib/api/api_provider.dart

@@ -1,3 +1,5 @@
+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';
@@ -18,24 +20,53 @@ enum HttpMethod { GET, POST }
 class ApiProvider extends GetConnect {
   //Get请求封装
   Future<void> requestNetwork(
-    String url, {
-    HttpMethod? method,
-    Map<String, String>? headers,
-    Map<String, dynamic>? query,
-    dynamic body,
-    NetSuccessCallback<Map<String, dynamic>>? onSuccess,
-    NetSuccessListCallback<List<dynamic>>? onSuccessList,
-    NetErrorCallback? onError,
-  }) async {
-    var req = method != null && method == HttpMethod.POST
-        ? post(url, body, headers: headers, query: query)
-        : get(url, headers: headers, query: query);
+      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;
-    final duration = endTime - startTime;
+
     if (!AppConstant.inProduction) {
+      final duration = endTime - startTime;
       Log.d('网络请求耗时 $duration 毫秒, 响应内容 ${result.body}}');
     }
 
@@ -63,8 +94,6 @@ class ApiProvider extends GetConnect {
         if (onError != null) {
           onError(jsonMap['code'], jsonMap['message']);
         }
-        //吐司Api错误信息
-        SmartDialog.compatible.showToast("${jsonMap['message']}");
       }
     } else {
       //网络请求错误
@@ -73,7 +102,8 @@ class ApiProvider extends GetConnect {
         onError(result.statusCode, result.statusText);
       }
       //吐司网络请求错误
-      SmartDialog.compatible.showToast("Request Network Error :${result.statusCode}  ${result.statusText}");
+      SmartDialog.compatible
+          .showToast("Request Network Error :${result.statusCode}  ${result.statusText}");
     }
   }
 
@@ -97,3 +127,4 @@ class ApiProvider extends GetConnect {
     // }
   }
 }
+

+ 24 - 0
lib/api/api_repository.dart

@@ -2,6 +2,7 @@ import 'package:ftrecruiter/api/api_provider.dart';
 import 'package:ftrecruiter/comm/constants/api_constants.dart';
 import 'package:ftrecruiter/entity/response/industry_data.dart';
 import 'package:ftrecruiter/entity/response/server_time.dart';
+import 'package:ftrecruiter/entity/response/user_login.dart';
 import 'package:ftrecruiter/entity/response/user_profile.dart';
 
 class ApiRepository {
@@ -55,4 +56,27 @@ class ApiRepository {
       }
     }, onError: onError);
   }
+
+  //用户登陆
+  void userLogin({NetSuccessCallback<UserLogin>? success, NetErrorCallback? onError}) {
+    Map<String, String> headers = {};
+    headers["Accept"] = "application/x.yyjobs-api.v1+json";
+
+    Map<String, String> params = {};
+    params["nric_no"] = "+8618571458165";
+    params["password"] = "12345678";
+    params["registration_id"] = "1234";
+
+    apiProvider.requestNetwork(ApiConstants.apiUserLogin,
+        method: HttpMethod.POST, headers: headers, query: params,
+        onSuccess: (json) {
+
+          var userLogin = UserLogin.fromJson(json);
+          if (success != null) {
+            success(userLogin);
+          }
+
+        }, onError: onError);
+  }
+
 }

+ 0 - 3
lib/api/interceptors/auth_interceptor.dart

@@ -17,8 +17,5 @@ FutureOr<Request> authInterceptor(request) async {
     request.headers['User-Agent'] = 'Mozilla/5.0';
   }
 
-  //默认添加Content-Type
-  request.headers["Content-Type"] = "application/x-www-form-urlencoded";
-
   return request;
 }

+ 3 - 0
lib/comm/constants/api_constants.dart

@@ -12,4 +12,7 @@ class ApiConstants {
   //行业列表
   static const apiIndustryList = "/index.php/api/employee/extra/industry";
 
+  //用户登陆
+  static const apiUserLogin = "/index.php/api/employee/auth/login";
+
 }

+ 24 - 0
lib/entity/response/user_login.dart

@@ -0,0 +1,24 @@
+class UserLogin {
+  int? memberId;
+  String? token;
+  String? signature;
+  String? identifier;
+
+  UserLogin({this.memberId, this.token, this.signature, this.identifier});
+
+  UserLogin.fromJson(Map<String, dynamic> json) {
+    memberId = json['member_id'];
+    token = json['token'];
+    signature = json['signature'];
+    identifier = json['identifier'];
+  }
+
+  Map<String, dynamic> toJson() {
+    final Map<String, dynamic> data = new Map<String, dynamic>();
+    data['member_id'] = this.memberId;
+    data['token'] = this.token;
+    data['signature'] = this.signature;
+    data['identifier'] = this.identifier;
+    return data;
+  }
+}