prepareRequest function

Future<PreparedRequest> prepareRequest(
  1. RequestApi requestApi, {
  2. required ResponseType responseType,
})

Implementation

Future<PreparedRequest> prepareRequest(
  RequestApi requestApi, {
  required ResponseType responseType,
}) async {
  fastDioLog(requestApi.requestUrl);
  if (requestApi.resolvedQueryParameters.isNotEmpty) {
    fastDioLog(
      'Query Parameters: ${json.encode(requestApi.resolvedQueryParameters)}',
    );
  }
  fastDioLog(json.encode(requestApi.body));

  final Map<String, String> globalHeaders = await FastDioHeader().getHeaders();
  final Map<String, String> requestHeaders = {
    ...?requestApi.headers,
    ...globalHeaders,
  };

  fastDioLog('Request Headers: $requestHeaders');

  final bool isMultipart =
      requestApi.isMultipartRequest || requestApi.files.isNotEmpty;

  dynamic data;
  if (isMultipart) {
    data = FormData.fromMap(_buildMultipartMap(requestApi));
  } else if (requestApi.body.isNotEmpty) {
    data = requestApi.body;
  }

  final RequestDioOptions? dioOptions = requestApi.dioOptions;
  Options options = Options(
    method: requestApi.method,
    headers: requestHeaders,
    responseType: responseType,
    contentType: _resolveContentType(requestApi, isMultipart),
    validateStatus: (_) => true,
  );

  if (dioOptions != null) {
    options = dioOptions.mergeWith(options);
  }

  final Map<String, dynamic> queryParameters = requestApi.resolvedQueryParameters;

  return PreparedRequest(
    url: requestApi.requestUrl,
    queryParameters: queryParameters.isEmpty ? null : queryParameters,
    data: data,
    options: options,
    cancelToken: dioOptions?.cancelToken,
    dioOptions: dioOptions,
  );
}