app-starlock/lib/network/api_provider_base.dart

169 lines
5.2 KiB
Dart
Executable File

import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/tools/showTipView.dart';
import '../appRouters.dart';
import '../flavors.dart';
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() {
httpClient.baseUrl = '${F.apiPrefix}/api';
httpClient.addRequestModifier(requestInterceptor);
httpClient.addResponseModifier(responseInterceptor);
httpClient.addRequestModifier(requestLogInterceptor);
httpClient.addResponseModifier(responseLogInterceptor);
httpClient.timeout = 15.seconds;
super.onInit();
}
@override
Future<Response<T>> post<T>(
String? url,
body, {
String? contentType = 'application/json',
Map<String, String>? headers,
Map<String, dynamic>? query,
Decoder<T>? decoder,
bool? isUnUploadFile = true,
Progress? uploadProgress,
bool? isUnShowLoading = false, // 是否显示loading
bool? isUserBaseUrl = true, // 文件上传不使用baseUrl
bool? isShowErrMsg = true, // 是否显示没有网络时的提示
bool? isShowNetworkErrorMsg = true, // 是否显示网络其他报错 如403 500等
}) async {
AppLog.log('post: url:$url body:$body');
if (isUnShowLoading == false) {
EasyLoading.show();
}
if (isUserBaseUrl == false) {
httpClient.baseUrl = '';
} else {
httpClient.baseUrl = '${F.apiPrefix}/api';
}
var res = await super.post(url, body,
contentType: contentType,
headers: headers,
query: query,
decoder: decoder,
uploadProgress: uploadProgress);
if (EasyLoading.isShow && !isUnShowLoading!) {
await EasyLoading.dismiss(animation: true);
}
if (res.body == null) {
// EasyLoading.showToast("Network Error!", duration: 2000.milliseconds);
if (res.statusCode == null && isShowErrMsg!) {
EasyLoading.showToast('网络访问失败,请检查网络是否正常'.tr,
duration: 2000.milliseconds);
// EasyLoading.showToast("Network Error!", 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,
);
} else {}
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) {
getDataResult(res.body);
}
return res;
}
getDataResult(T) {
switch (T['errorCode']) {
case 403:
Get.offNamedUntil(Routers.starLockLoginPage, (route) => false);
break;
case 500:
EasyLoading.showToast('服务器错误', duration: 2000.milliseconds);
break;
case 421:
case 422:
case 430: //与葛工约定弹出ErrorMsg
EasyLoading.showToast(T['errorMsg'], duration: 2000.milliseconds);
break;
//已单独处理,暂不做全局弹窗
// case 425:
// Toast.show(msg: "用户不存在");
// break;
case 10001:
EasyLoading.showToast('数据不存在'.tr, duration: 2000.milliseconds);
break;
case 434: //与后台约定弹出确认框提示
ShowTipView()
.showSureBtnTipsAlert(tipsText: T['errorMsg'], sureText: '');
break;
}
}
}