request<T> method
dio 网络请求 网络请求每个请求配置的优先级最高,其次才是默认配置
url
接口地址
params
参数地址
host
接口域名
options
配置信息
cancelToken
接口取消token
Implementation
Future<T> request<T>(
String url, {
Map<String, dynamic>? params,
String host = "",
Method method = Method.Post,
Options? options,
CancelToken? cancelToken,
}) async {
//对请求域名做切换
if (url.contains("http://") || url.contains("https://")) {
_dio.options.baseUrl = "";
} else {
if (host.isEmpty) {
//域名为空的时候获取配置接口
_dio.options.baseUrl = RxDioConfig.instance.getHost();
} else {
//域名有值则直接获取域名
_dio.options.baseUrl = host;
}
}
// 返回结果,String类型
Response<String> response;
try {
///添加cancelToken取消请求头
cancelToken ??= CancelToken();
_cancelTokenList.add(cancelToken);
switch (method) {
case Method.Post:
response = await _dio.post(url,
queryParameters: params,
data: params,
options: options,
cancelToken: cancelToken);
break;
case Method.Get:
response = await _dio.get(url,
queryParameters: params,
options: options,
cancelToken: cancelToken);
break;
case Method.Delete:
response = await _dio.delete(url,
queryParameters: params,
data: params,
options: options,
cancelToken: cancelToken);
break;
case Method.Put:
response = await _dio.put(url,
queryParameters: params,
data: params,
options: options,
cancelToken: cancelToken);
break;
}
//这里判断是网络状态,并不是业务状态
if (response.statusCode == RxDioConstants.networkStatus) {
Map<String, dynamic> data = json.decode(response.toString());
//对象数据类型
BaseBean bean = BaseBean<T>.fromJson(data);
if (bean.isSuccess()) {
/// 返回泛型Bean
return await bean.data as T;
} else {
return await Future.error(bean.message);
}
} else {
return await Future.error(
"服务器错误${response.statusCode},message${response.statusMessage}");
}
} on DioError catch (error) {
return await Future.error(error);
} finally {
///请求完成移除cancelToken
if (_cancelTokenList.contains(cancelToken)) {
_cancelTokenList.remove(cancelToken);
}
}
}