close method
Close the request for input. Returns the value of done.
Implementation
@override
Future<HttpClientResponse> close() async {
final response = await _inner.close();
if (!ApiLogService().isEnabled) return response;
final sessionId = ApiLogService().currentSessionId ?? 'unknown';
final logId = const Uuid().v4();
final url = uri.toString();
final method = this.method;
final requestHeaders = <String, String>{};
headers.forEach((name, values) {
requestHeaders[name] = values.join(', ');
});
final screenName = ScreenTracker().currentScreen;
final requestBody = _decodeBody(_bodyBytes, headers.contentType);
return LoggingHttpClientResponse(response, (responseBodyBytes) {
final endTime = DateTime.now();
final duration = endTime.difference(_startTime);
final responseHeaders = <String, String>{};
response.headers.forEach((name, values) {
responseHeaders[name] = values.join(', ');
});
final responseBody = _decodeBody(
responseBodyBytes,
response.headers.contentType,
);
final log = ApiLogModel(
id: logId,
sessionId: sessionId,
method: method,
url: url,
requestHeaders: requestHeaders,
requestBody: requestBody,
responseHeaders: responseHeaders,
responseBody: responseBody,
statusCode: response.statusCode,
timestamp: _startTime,
duration: duration,
screenName: screenName,
isError: response.statusCode >= 400,
);
ApiLogService().addLog(log);
});
}