onResponse method
- Response response,
- ResponseInterceptorHandler handler
override
Called when the response is about to be resolved.
Implementation
@override
void onResponse(Response response, ResponseInterceptorHandler handler) {
final compactFormat = NumberFormat.compact().format;
final method = response.requestOptions.method;
final uri = response.requestOptions.uri;
final parameters = response.requestOptions.queryParameters.length;
final requestBodyLength = switch (response.requestOptions.data) {
String s => s.length,
List l => l.length,
FormData f => f.length,
Map m => m.length,
_ => null,
};
final requestLog = [
method,
"${uri.origin}${uri.path}",
if (parameters > 0) "$parameters param${parameters != 1 ? 's' : ''}",
if (requestBodyLength case final l?) "${compactFormat(l)}B",
].join(' ');
final statusCode = response.statusCode;
final contentType = response.headers
.value(HttpHeaders.contentTypeHeader)
?.split(';')
.first;
final contentLengthHeader = response.headers.value(
HttpHeaders.contentLengthHeader,
);
final responseBodyLength =
int.tryParse(contentLengthHeader ?? '') ??
switch (response.data) {
String s => s.length,
List l => l.length,
Map m => m.length,
_ => null,
};
final cookies = response.headers[HttpHeaders.setCookieHeader]?.length;
final responseLog = [
statusCode,
if (contentType case final t) t,
if (responseBodyLength case final l?) '${compactFormat(l)}B',
if (cookies case final c? when c > 0) "$c cookie${c != 1 ? 's' : ''}",
].join(' ');
final message = "$requestLog => $responseLog";
log(message, name: 'HTTP');
firebase.log(message);
handler.next(response);
}