2023-07-27 15:29:37 +08:00
|
|
|
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
2023-08-26 11:40:40 +08:00
|
|
|
|
2023-07-27 15:29:37 +08:00
|
|
|
import 'package:get/get.dart';
|
2024-04-26 15:38:59 +08:00
|
|
|
import 'package:star_lock/app_settings/app_settings.dart';
|
2024-06-07 15:58:24 +08:00
|
|
|
import 'package:star_lock/tools/showTipView.dart';
|
2023-08-26 11:40:40 +08:00
|
|
|
import '../appRouters.dart';
|
2024-01-27 16:05:17 +08:00
|
|
|
import '../flavors.dart';
|
2023-07-27 15:29:37 +08:00
|
|
|
import 'api.dart';
|
|
|
|
|
import 'request_interceptor.dart';
|
|
|
|
|
import 'request_interceptor_log.dart';
|
|
|
|
|
import 'response_interceptor.dart';
|
|
|
|
|
import 'response_interceptor_log.dart';
|
|
|
|
|
|
|
|
|
|
class BaseProvider extends GetConnect with Api {
|
|
|
|
|
@override
|
|
|
|
|
void onInit() {
|
2024-01-27 16:05:17 +08:00
|
|
|
httpClient.baseUrl = '${F.apiPrefix}/api';
|
2023-07-27 15:29:37 +08:00
|
|
|
httpClient.addRequestModifier(requestInterceptor);
|
|
|
|
|
httpClient.addResponseModifier(responseInterceptor);
|
|
|
|
|
httpClient.addRequestModifier(requestLogInterceptor);
|
|
|
|
|
httpClient.addResponseModifier(responseLogInterceptor);
|
|
|
|
|
httpClient.timeout = 15.seconds;
|
|
|
|
|
super.onInit();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
2024-04-10 17:18:53 +08:00
|
|
|
Future<Response<T>> post<T>(
|
|
|
|
|
String? url,
|
|
|
|
|
body, {
|
2024-05-28 17:26:02 +08:00
|
|
|
String? contentType = 'application/json',
|
2024-04-10 17:18:53 +08:00
|
|
|
Map<String, String>? headers,
|
|
|
|
|
Map<String, dynamic>? query,
|
|
|
|
|
Decoder<T>? decoder,
|
|
|
|
|
bool? isUnUploadFile = true,
|
|
|
|
|
Progress? uploadProgress,
|
|
|
|
|
bool? isUnShowLoading = false, // 是否显示loading
|
|
|
|
|
bool? isUserBaseUrl = true, // 文件上传不使用baseUrl
|
2024-06-21 09:32:47 +08:00
|
|
|
bool? isShowErrMsg = true, // 是否显示没有网络时的提示
|
|
|
|
|
bool? isShowNetworkErrorMsg = true, // 是否显示网络其他报错 如403 500等
|
2024-12-31 13:57:22 +08:00
|
|
|
int? timeout = 15,
|
2024-04-10 17:18:53 +08:00
|
|
|
}) async {
|
2024-05-28 17:26:02 +08:00
|
|
|
AppLog.log('post: url:$url body:$body');
|
2024-05-30 15:31:14 +08:00
|
|
|
if (isUnShowLoading == false) {
|
2024-05-14 09:32:06 +08:00
|
|
|
EasyLoading.show();
|
|
|
|
|
}
|
2024-04-10 17:18:53 +08:00
|
|
|
if (isUserBaseUrl == false) {
|
2024-04-10 13:36:00 +08:00
|
|
|
httpClient.baseUrl = '';
|
2024-04-10 17:18:53 +08:00
|
|
|
} else {
|
2024-04-10 13:36:00 +08:00
|
|
|
httpClient.baseUrl = '${F.apiPrefix}/api';
|
|
|
|
|
}
|
2024-12-31 13:57:22 +08:00
|
|
|
httpClient.timeout = timeout!.seconds;
|
|
|
|
|
// AppLog.log('timeout:$timeout httpClient.timeout:${httpClient.timeout}');
|
2023-08-07 10:32:24 +08:00
|
|
|
var res = await super.post(url, body,
|
|
|
|
|
contentType: contentType,
|
|
|
|
|
headers: headers,
|
|
|
|
|
query: query,
|
|
|
|
|
decoder: decoder,
|
|
|
|
|
uploadProgress: uploadProgress);
|
2024-06-03 15:27:15 +08:00
|
|
|
if (EasyLoading.isShow && !isUnShowLoading!) {
|
|
|
|
|
await EasyLoading.dismiss(animation: true);
|
|
|
|
|
}
|
2023-08-07 10:32:24 +08:00
|
|
|
if (res.body == null) {
|
2024-04-03 16:50:42 +08:00
|
|
|
// EasyLoading.showToast("Network Error!", duration: 2000.milliseconds);
|
2024-05-30 15:31:14 +08:00
|
|
|
if (res.statusCode == null && isShowErrMsg!) {
|
|
|
|
|
EasyLoading.showToast('网络访问失败,请检查网络是否正常'.tr,
|
|
|
|
|
duration: 2000.milliseconds);
|
2024-04-12 18:03:40 +08:00
|
|
|
// EasyLoading.showToast("Network Error!", duration: 2000.milliseconds);
|
2024-04-17 15:59:20 +08:00
|
|
|
}
|
2023-07-27 15:29:37 +08:00
|
|
|
var rs = {
|
2024-05-28 17:26:02 +08:00
|
|
|
'errorMsg': 'Network Error!',
|
|
|
|
|
'errorCode': -1,
|
|
|
|
|
'data': null,
|
|
|
|
|
'description': '表示成功或是。'
|
2023-07-27 15:29:37 +08:00
|
|
|
};
|
|
|
|
|
return Response(
|
|
|
|
|
request: res.request,
|
|
|
|
|
statusCode: -1,
|
|
|
|
|
bodyString: res.bodyString,
|
|
|
|
|
bodyBytes: res.bodyBytes,
|
|
|
|
|
body: rs as T,
|
|
|
|
|
statusText: res.statusText,
|
|
|
|
|
);
|
2023-12-13 18:08:31 +08:00
|
|
|
} else {}
|
2024-11-28 14:57:49 +08:00
|
|
|
if (isShowNetworkErrorMsg ?? true) {
|
|
|
|
|
getDataResult(res.body);
|
|
|
|
|
}
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Future<Response<T>> get<T>(
|
|
|
|
|
String url, {
|
|
|
|
|
String? contentType,
|
|
|
|
|
Map<String, String>? headers,
|
|
|
|
|
Map<String, dynamic>? query,
|
|
|
|
|
Decoder<T>? decoder,
|
|
|
|
|
bool? isUnShowLoading = false, // 是否显示loading
|
|
|
|
|
bool? isUserBaseUrl = true, // 文件上传不使用baseUrl
|
|
|
|
|
bool? isShowErrMsg = true, // 是否显示没有网络时的提示
|
|
|
|
|
bool? isShowNetworkErrorMsg = true, // 是否显示网络其他报错 如403 500等
|
|
|
|
|
}) async {
|
|
|
|
|
AppLog.log('get: url:$url');
|
|
|
|
|
if (isUnShowLoading == false) {
|
|
|
|
|
EasyLoading.show();
|
|
|
|
|
}
|
|
|
|
|
if (isUserBaseUrl == false) {
|
|
|
|
|
httpClient.baseUrl = '';
|
|
|
|
|
} else {
|
|
|
|
|
httpClient.baseUrl = '${F.apiPrefix}/api';
|
|
|
|
|
}
|
|
|
|
|
var res = await super.get(url,
|
|
|
|
|
contentType: contentType,
|
|
|
|
|
headers: headers,
|
|
|
|
|
query: query,
|
|
|
|
|
decoder: decoder);
|
|
|
|
|
if (EasyLoading.isShow && !isUnShowLoading!) {
|
|
|
|
|
await EasyLoading.dismiss(animation: true);
|
|
|
|
|
}
|
|
|
|
|
if (res.body == null) {
|
|
|
|
|
if (res.statusCode == null && isShowErrMsg!) {
|
|
|
|
|
EasyLoading.showToast('网络访问失败,请检查网络是否正常'.tr,
|
|
|
|
|
duration: 2000.milliseconds);
|
|
|
|
|
}
|
|
|
|
|
var rs = {
|
|
|
|
|
'errorMsg': 'Network Error!',
|
|
|
|
|
'errorCode': -1,
|
|
|
|
|
'data': null,
|
|
|
|
|
'description': '表示成功或是。'
|
|
|
|
|
};
|
|
|
|
|
return Response(
|
|
|
|
|
request: res.request,
|
|
|
|
|
statusCode: -1,
|
|
|
|
|
bodyString: res.bodyString,
|
|
|
|
|
bodyBytes: res.bodyBytes,
|
|
|
|
|
body: rs as T,
|
|
|
|
|
statusText: res.statusText,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
if (isShowNetworkErrorMsg ?? true) {
|
2024-06-21 09:32:47 +08:00
|
|
|
getDataResult(res.body);
|
|
|
|
|
}
|
2023-07-27 15:29:37 +08:00
|
|
|
return res;
|
|
|
|
|
}
|
2023-08-26 11:40:40 +08:00
|
|
|
|
2023-09-22 11:45:24 +08:00
|
|
|
getDataResult(T) {
|
2024-05-28 17:26:02 +08:00
|
|
|
switch (T['errorCode']) {
|
2023-08-26 11:40:40 +08:00
|
|
|
case 403:
|
|
|
|
|
Get.offNamedUntil(Routers.starLockLoginPage, (route) => false);
|
|
|
|
|
break;
|
|
|
|
|
case 500:
|
2024-08-21 14:12:15 +08:00
|
|
|
EasyLoading.showToast('服务器错误', duration: 2000.milliseconds);
|
2023-08-26 11:40:40 +08:00
|
|
|
break;
|
|
|
|
|
case 421:
|
|
|
|
|
case 422:
|
2023-10-11 18:24:52 +08:00
|
|
|
case 430: //与葛工约定弹出ErrorMsg
|
2024-05-28 17:26:02 +08:00
|
|
|
EasyLoading.showToast(T['errorMsg'], duration: 2000.milliseconds);
|
2023-08-26 11:40:40 +08:00
|
|
|
break;
|
2023-10-16 17:18:10 +08:00
|
|
|
//已单独处理,暂不做全局弹窗
|
|
|
|
|
// case 425:
|
|
|
|
|
// Toast.show(msg: "用户不存在");
|
|
|
|
|
// break;
|
2023-08-26 11:40:40 +08:00
|
|
|
case 10001:
|
2024-08-20 09:53:39 +08:00
|
|
|
EasyLoading.showToast('数据不存在'.tr, duration: 2000.milliseconds);
|
2023-08-26 11:40:40 +08:00
|
|
|
break;
|
2024-06-07 15:58:24 +08:00
|
|
|
case 434: //与后台约定弹出确认框提示
|
2024-06-15 17:20:55 +08:00
|
|
|
ShowTipView()
|
2024-08-20 09:53:39 +08:00
|
|
|
.showSureBtnTipsAlert(tipsText: T['errorMsg'], sureText: '');
|
2024-06-07 15:58:24 +08:00
|
|
|
break;
|
2023-08-26 11:40:40 +08:00
|
|
|
}
|
|
|
|
|
}
|
2023-08-07 10:32:24 +08:00
|
|
|
}
|