send method

  1. @override
Future<StreamedResponse> send(
  1. BaseRequest request
)

Sends an HTTP request and asynchronously returns the response.

Implementers should call BaseRequest.finalize to get the body of the request as a ByteStream. They shouldn't make any assumptions about the state of the stream; it could have data written to it asynchronously at a later point, or it could already be closed when it's returned. Any internal HTTP errors should be wrapped as ClientExceptions.

Implementation

@override
Future<http.StreamedResponse> send(http.BaseRequest request) async {
  bool enabled = DebugOverlay.enabled;

  try {
    var effectiveRequest = request;
    if (enabled) {
      var requestBody = await request.finalize().toBytes();
      httpBucket.add(HttpInteraction(
        id: request.hashCode,
        uri: request.url,
        method: request.method,
        request: convertRequest(request, requestBody),
      ));
      effectiveRequest =
          _copyRequest(request, http.ByteStream.fromBytes(requestBody));
    }

    http.StreamedResponse response = await _inner.send(effectiveRequest);

    if (enabled) {
      var responseBody = await response.stream.toBytes();
      httpBucket.addResponse(
        request.hashCode,
        convertResponse(response, responseBody),
      );
      return _copyResponse(response, http.ByteStream.fromBytes(responseBody));
    }
    return response;
  } catch (e, stack) {
    if (enabled) {
      httpBucket.addError(request.hashCode, convertError(e, stack));
    }
    rethrow;
  }
}