request method
Implementation
Future<E> request({bool isCached = true}) async {
// 添加 DioCacheInterceptor 拦截器实现接口缓存:
if (isCached) {
// OPTIMIZE: 自定义接口缓存
final cacheInterceptors = DioCacheInterceptor(
options: CacheOptions(
store: MemCacheStore(),
),
);
_dio.interceptors.add(cacheInterceptors);
}
if (kPrintable) {
// 添加 LogInterceptor 拦截器来自动打印请求、响应日志:
_dio.interceptors.add(
MDioLogger(
requestHeader: true,
requestBody: true,
maxWidth: consoleOutputLength - 2,
),
);
}
// 网络请求
try {
Object? data;
Parameters? queryParameters = parameters;
if (config.ensureNonNullParametersFields) {
queryParameters?.removeWhere((key, value) => value == null);
}
if (method == HTTPMethod.POST && config.postUseFormData && queryParameters != null) {
data = FormData.fromMap(queryParameters);
queryParameters = null;
}
final response = await _dio.request(
url,
data: data,
queryParameters: queryParameters,
options: options,
);
final responder = decodeJson(response.data);
if (responder.isSuccess || !config.isHandleErrors) {
return responder;
}
return Future.error(
responder.error ??
APIError(
code: -1,
message: '接口请求错误',
),
);
} on DioException catch (e) {
logger.e('$e \n $path');
if (e.response == null) {
return Future.error(e.error ?? APIError.error());
}
if (e.type == DioExceptionType.badResponse && e.response?.statusCode == 503) {
return Future.error(
APIError(
code: e.response?.statusCode,
message: '服务正在重启, 请稍后再试',
),
);
}
final responder = decodeJson(e.response!.data);
return Future.error(
responder.error?.copyWith(
code: e.response?.statusCode,
message: e.response?.statusMessage,
) ??
APIError(
code: e.response?.statusCode,
message: e.response?.statusMessage ?? '接口请求错误',
),
);
} on Error catch (e) {
logger.e('$e \n $path');
return Future.error(e);
}
}