onResponse method

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

Called when the response is about to be resolved.

Implementation

@override
void onResponse(
  Response<dynamic> response,
  ResponseInterceptorHandler handler,
) {
  super.onResponse(response, handler);
  if (!settings.enabled) {
    return;
  }
  final accepted = settings.responseFilter?.call(response) ?? true;
  if (!accepted) {
    return;
  }
  try {
    final message = '${response.requestOptions.uri}';

    //
    // <--- Request data --->
    //
    Map<String, dynamic>? requestBody;
    if (response.requestOptions.data is FormData) {
      final formData = response.requestOptions.data as FormData;
      final fields = formData.fields;
      final files = formData.files
          .map(
            (e) => {
              'key': e.key,
              'filename': e.value.filename,
              'contentType': e.value.contentType,
              'length': e.value.length,
              'headers': e.value.headers,
            },
          )
          .toList();
      requestBody = {
        'fields': fields,
        'files': files,
      };
    } else {
      requestBody = response.requestOptions.data as Map<String, dynamic>?;
    }

    //
    // <--- Response data --->
    //
    Object? responseBody;
    if (response.data is FormData) {
      final formData = response.data as FormData;
      final fields = formData.fields;
      final files = formData.files
          .map(
            (e) => {
              'key': e.key,
              'filename': e.value.filename,
              'contentType': e.value.contentType,
              'length': e.value.length,
              'headers': e.value.headers,
            },
          )
          .toList();
      responseBody = {
        'fields': fields,
        'files': files,
      };
    } else {
      responseBody = response.data;
    }

    final httpLog = DioResponseLog(
      message,
      settings: settings,
      method: response.requestOptions.method,
      url: response.requestOptions.uri.toString(),
      path: response.requestOptions.uri.path,
      statusCode: response.statusCode,
      statusMessage: response.statusMessage,
      requestHeaders: response.requestOptions.headers,
      headers: response.headers.map
          .map((key, value) => MapEntry(key, value.toString())),
      requestBody: requestBody,
      responseBody: responseBody,
    );
    _iSpectify.logCustom(httpLog);
  } catch (_) {
    //pass
  }
}