onResponse method
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);
}