onResponse method

  1. @override
void onResponse(
  1. Response response,
  2. ResponseInterceptorHandler handler
)
override

Called when the response is about to be resolved.

Implementation

@override
void onResponse(Response response, ResponseInterceptorHandler handler) {
  final method = response.requestOptions.method;
  final uri = response.requestOptions.uri;
  final parameters = response.requestOptions.queryParameters.length;
  final bodyLength = response.requestOptions.data?.length;

  final requestLog = [
    method,
    "${uri.origin}${uri.path}",
    if (parameters > 0) "$parameters param${parameters != 1 ? 's' : ''}",
    if (bodyLength is int)
      "${NumberFormat.compact().format(bodyLength)}B body",
  ].join(' ');

  final statusCode = response.statusCode;
  final contentType = response.headers
      .value(HttpHeaders.contentTypeHeader)
      ?.split(';')
      .first;
  final contentLength =
      int.tryParse(
        response.headers.value(HttpHeaders.contentLengthHeader) ?? '',
      ) ??
      response.data.length ??
      0;
  final cookies = response.headers[HttpHeaders.setCookieHeader]?.length ?? 0;

  final responseLog = [
    statusCode,
    if (contentType != null) contentType,
    if (contentLength > 0) '${NumberFormat.compact().format(contentLength)}B',
    if (cookies > 0) "$cookies cookie${cookies != 1 ? 's' : ''}",
  ].join(' ');

  log("$requestLog => $responseLog", name: 'HTTP');
  handler.next(response);
}