send method

Future<Response> send(
  1. Request request
)

Send an HTTP request using Dio under the hood while returning an http.Response for compatibility with existing hooks/tests.

Implementation

Future<http.Response> send(http.Request request) async {
  final options = Options(
    method: request.method,
    headers: request.headers,
    responseType: ResponseType.plain,
    validateStatus: (_) => true,
  );

  final dioResponse = await _dio.requestUri(
    request.url,
    data: request.body.isNotEmpty ? request.body : null,
    options: options,
  );

  final rawHeaders = <String, String>{};
  dioResponse.headers.forEach((key, values) {
    rawHeaders[key] = values.join(',');
  });

  final bodyString = dioResponse.data is String
      ? dioResponse.data as String
      : jsonEncode(dioResponse.data);

  return http.Response(
    bodyString,
    dioResponse.statusCode ?? 500,
    headers: rawHeaders,
    request: request,
    isRedirect: dioResponse.isRedirect ?? false,
    persistentConnection: true,
    reasonPhrase: dioResponse.statusMessage,
  );
}