request<T> method

Future<T> request<T>(
  1. String url, {
  2. Map<String, dynamic>? params,
  3. String host = "",
  4. Method method = Method.Post,
  5. Options? options,
  6. CancelToken? cancelToken,
})

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);
    }
  }
}