onResponse method

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

Called when the response is about to be resolved.

Implementation

@override
Future<void> onResponse(
  Response response,
  ResponseInterceptorHandler handler,
) async {
  final dateTime = DateTime.now();

  if (InspectorController().responseStopperEnabled) {
    final url = _extractUrl(response.requestOptions).key;
    final oldResponseData = ResponseDetails(
      url: url,
      statusCode: response.statusCode ?? 0,
      headers: response.headers.map,
      responseBody: response.data,
    );

    final newResponseData = await InspectorController().editResponse(
      oldResponseData,
    );

    if (newResponseData != null) {
      response.data = newResponseData.responseBody;
      response.statusCode = newResponseData.statusCode;
      // Update headers if they were modified
      if (newResponseData.headers != null) {
        response.headers.clear();
        if (newResponseData.headers is Map) {
          (newResponseData.headers as Map).forEach((key, value) {
            response.headers.add(key.toString(), value.toString());
          });
        }
      }
    }
  }

  final urlAndQueryParMapEntry = _extractUrl(response.requestOptions);
  final url = urlAndQueryParMapEntry.key;
  final queryParameters = urlAndQueryParMapEntry.value;
  InspectorController().addNewRequest(
    RequestDetails(
      requestMethod: RequestMethod.values.firstWhere(
        (e) => e.name == response.requestOptions.method,
      ),
      url: url,
      statusCode: response.statusCode ?? 0,
      headers: response.requestOptions.headers,
      queryParameters: queryParameters,
      requestBody: response.requestOptions.data,
      responseBody: response.data,
      sentTime: response.requestOptions.extra['startTime'],
      receivedTime: dateTime,
    ),
  );
  super.onResponse(response, handler);
}