request method

  1. @Doc(message: "向服务器发起http请求")
Future<T> request([
  1. RequestParams options = const RequestParams()
])

isFullUrl - url传入的是否为完整的一个URL,如果为true,将忽略host

Implementation

@Doc(message: "向服务器发起http请求")
Future<T> request([RequestParams options = const RequestParams()]) async {
  try {
    if (options.showDefaultLoading) {
      showLoading(loadingText: options.loadingText);
    }
    final baseOptions = await getOptions(options);
    final d = await getDio(baseOptions);
    d.interceptors.addAll(options.interceptorCall?.call(interceptions) ?? interceptions);
    final contentTypeStr =
        options.contentType ?? (httpMethod == HttpMethod.post ? io.ContentType.json.value : options.contentType);
    final bodyParams = formData ?? (options.data ?? params);
    final queryParameters =
        httpMethod == HttpMethod.post ? null : (options.nullParams == true ? null : options.data ?? params);
    final contentTypeString = httpMethod == HttpMethod.probuf ? kProtobufContentType : contentTypeStr;
    final finalUrl = options.isFullUrl ? url : (_host + url);
    await options.dioStart?.call(d, finalUrl);
    printLog("url---$finalUrl");
    printLog("params---$queryParameters");
    var uri = (options.urlParseFormat ?? (v, p) => v).call(finalUrl, queryParameters);
    final bodyData = httpMethod == HttpMethod.get ? null : bodyParams;
    printLog("body--$bodyData");
    final response = await d.request(uri,
        options: dio.Options(
          method: httpMethod.method,
          contentType: contentTypeString,
          headers: options.headers,
          responseType: options.responseType,
          requestEncoder: options.requestEncoder,
        ),
        queryParameters: httpMethod == HttpMethod.get ? queryParameters : null,
        data: bodyData,
        onReceiveProgress: options.onReceiveProgress,
        onSendProgress: options.onSendCallback,
        cancelToken: options.cancelToken);
    options.responseResultCallback?.call(response);
    if (options.showDefaultLoading) {
      closeLoading();
    }

    final data = response.data;
    var model = DartTypeModel.createFrom(data);
    beforeHandleDartTypeModel(model,options,response);
    return covertToModel(model, options);
  } on dio.DioException catch (e) {
    throw BaseApiException.createFromDioException(e);
  } finally {
    if (options.showDefaultLoading) {
      closeLoading();
    }
  }
}