send method

  1. @override
Future<HttpResponse> send(
  1. HttpRequest request
)
override

Sends request through Dio and returns a flattened HttpResponse.

Non-2xx responses are returned normally. Transport exceptions without a response are rethrown to the caller.

Implementation

@override

/// Sends [request] through Dio and returns a flattened [HttpResponse].
///
/// Non-2xx responses are returned normally. Transport exceptions without a
/// response are rethrown to the caller.
Future<HttpResponse> send(HttpRequest request) async {
  final options = Options(
    method: request.method,
    headers: request.headers,
    responseType: _mapResponseType(request.responseType),
    validateStatus: (_) => true,
  );

  final data = await _mapBody(request.body);

  try {
    final res = await _dio.request(
      request.endpoint,
      queryParameters: request.query,
      data: data,
      options: options,
    );

    return HttpResponse(
      statusCode: res.statusCode,
      headers: res.headers.map.map((k, v) => MapEntry(k, v.join(','))),
      data: res.data,
    );
  } on DioException catch (e) {
    final res = e.response;
    if (res != null) {
      return HttpResponse(
        statusCode: res.statusCode,
        headers: res.headers.map.map((k, v) => MapEntry(k, v.join(','))),
        data: res.data,
      );
    }
    rethrow;
  }
}