send method

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

Sends an HTTP request and asynchronously returns the response.

Implementation

@override
Future<http.StreamedResponse> send(http.BaseRequest request) async {
  try {
    // Log request details
    String requestData = (request is http.Request)
        ? '\nšŸ“¤ Request Data: ${request.body}'
        : '\nšŸ“¤ Request Data: Not applicable for this type of request';
    _logger.i(
        'šŸš€ 🌐 Request 🌐 šŸš€\nšŸ”— URL: ${request.url}\nšŸ¤” Method: ${request.method}\nšŸ“‹ Headers: ${jsonEncode(request.headers)}\nšŸ” Query Parameters: ${request.url.queryParameters}$requestData');

    // Send the request and get the response
    final streamedResponse = await _inner.send(request);

    // Log response details
    String responseData =
        '\nšŸ”— URL: ${streamedResponse.request?.url}\nšŸ”’ Status Code: ${streamedResponse.statusCode}\nšŸ“‹ Headers: ${jsonEncode(streamedResponse.headers)}';
    _logger.i('āœ… 🌐 Response 🌐 āœ…$responseData');

    // Read the response stream and create a new http.Response
    final body = await streamedResponse.stream.bytesToString();
    final response = http.Response(
      body,
      streamedResponse.statusCode,
      headers: streamedResponse.headers,
      request: request as http.Request,
    ); // Cast to http.Request

    _logger.i('šŸ“„ Response Data: ${response.body}');

    return streamedResponse;
  } catch (error) {
    // Log request error
    String requestErrorData =
        (request is http.Request) ? '\nā— Request Data: ${request.body}' : '';
    _logger.e('āŒ ā— ERROR ā— āŒ\nā— Error Message: $error$requestErrorData');
    rethrow; // Rethrow the error after logging
  }
}