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

Sends an HTTP request and asynchronously returns the response.

Source

@override
Future<StreamedResponse> send(BaseRequest request) async {
  dynamic stream = request.finalize();

  try {
    dynamic ioRequest = await _inner.openUrl(request.method, request.url);

    ioRequest
        ..followRedirects = request.followRedirects
        ..maxRedirects = request.maxRedirects
        ..contentLength = request.contentLength == null
            ? -1
            : request.contentLength
        ..persistentConnection = request.persistentConnection;
    request.headers.forEach((String name, String value) {
      ioRequest.headers.set(name, value);
    });

    dynamic response = await stream.pipe(
        DelegatingStreamConsumer.typed(ioRequest));
    Map<String, dynamic> headers = <String, dynamic>{};
    response.headers.forEach((String key, dynamic values) {
      headers[key] = values.join(',');
    });

    return new StreamedResponse(
        DelegatingStream.typed/*<List<int>>*/(response).handleError((dynamic error) =>
            throw new ClientException(error.message, error.uri),
            test: (dynamic error) => io.isHttpException(error)),
        response.statusCode,
        contentLength: response.contentLength == -1
            ? null
            : response.contentLength,
        request: request,
        headers: headers,
        isRedirect: response.isRedirect,
        persistentConnection: response.persistentConnection,
        reasonPhrase: response.reasonPhrase);
  } catch (error) {
    if (!io.isHttpException(error)) rethrow;
    throw new ClientException(error.message, error.uri);
  }
}