send method
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
}
}