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<StreamedResponse> send(BaseRequest request) async {
  _requestTime = DateTime.now();
  await SharedPreferencesManager.getInstance().getSettings();

  final interceptedRequest = onRequest(request);

  final response = await _client.send(request);

  final bytes = await response.stream.toBytes();

  final interceptedResponse = onResponse(response);

  if (ChuckerFlutter.isDebugMode || ChuckerFlutter.showOnRelease) {
    ChuckerUiHelper.showNotification(
      method: interceptedRequest.method,
      statusCode: interceptedResponse.statusCode,
      path: interceptedRequest.url.path,
      requestTime: _requestTime,
    );

    await _saveResponse(
      interceptedRequest,
      bytes,
      response.statusCode,
      response.contentLength?.toDouble() ?? 0,
      response.headers['content-type'] ??
          response.headers['Content-Type'] ??
          'N/A',
    );
  }

  return StreamedResponse(
    ByteStream.fromBytes(bytes),
    response.statusCode,
    contentLength: response.contentLength,
    request: response.request,
    headers: response.headers,
    isRedirect: response.isRedirect,
    persistentConnection: response.persistentConnection,
    reasonPhrase: response.reasonPhrase,
  );
}