http 初始化

This commit is contained in:
guozhigq
2023-04-18 11:28:59 +08:00
parent aaccfe4542
commit 13aab2e20f
11 changed files with 385 additions and 1 deletions

71
lib/http/interceptor.dart Normal file
View File

@ -0,0 +1,71 @@
import 'package:dio/dio.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
class ApiInterceptor extends Interceptor {
@override
void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
// print("请求之前");
// 在请求之前添加头部或认证信息
// options.headers['Authorization'] = 'Bearer token';
// options.headers['Content-Type'] = 'application/json';
handler.next(options);
}
@override
void onResponse(Response response, ResponseInterceptorHandler handler) {
// print("响应之前");
handler.next(response);
}
@override
void onError(DioError err, ErrorInterceptorHandler handler) {
// 处理网络请求错误
handler.next(err);
super.onError(err, handler);
}
static Future dioError(DioError error) async {
switch (error.type) {
case DioErrorType.badCertificate:
return '证书有误!';
case DioErrorType.badResponse:
return '服务器异常,请稍后重试!';
case DioErrorType.cancel:
return "请求已被取消,请重新请求";
case DioErrorType.connectionError:
return '连接错误,请检查网络设置';
case DioErrorType.connectionTimeout:
return "网络连接超时,请检查网络设置";
case DioErrorType.receiveTimeout:
return "响应超时,请稍后重试!";
case DioErrorType.sendTimeout:
return "发送请求超时,请检查网络设置";
case DioErrorType.unknown:
var res = await checkConect();
return "$res 网络异常,请稍后重试!";
default:
return "Dio异常";
}
}
static Future<dynamic> checkConect() async {
final connectivityResult = await (Connectivity().checkConnectivity());
if (connectivityResult == ConnectivityResult.mobile) {
return 'connected with mobile network';
} else if (connectivityResult == ConnectivityResult.wifi) {
return 'connected with wifi network';
} else if (connectivityResult == ConnectivityResult.ethernet) {
// I am connected to a ethernet network.
} else if (connectivityResult == ConnectivityResult.vpn) {
// I am connected to a vpn network.
// Note for iOS and macOS:
// There is no separate network interface type for [vpn].
// It returns [other] on any device (also simulator)
} else if (connectivityResult == ConnectivityResult.other) {
// I am connected to a network which is not in the above mentioned networks.
} else if (connectivityResult == ConnectivityResult.none) {
return 'not connected to any network';
}
}
}