onResponse method
Called when the response is about to be resolved.
Implementation
@override
Future<void> onResponse(Response response, ResponseInterceptorHandler handler) async {
//print("testmonitor onResponse url111 = ${response.requestOptions.uri.toString()} ${this}");
// TODO: implement onResponse
/* print("response request header size = ${response.requestOptions.headers.length}");
print("onResponse");*/
var uuid = response.requestOptions.extra["uuid"];
late List<MonitorPair> responseHeaders = [];
for (var entry in response.headers.map.entries){
responseHeaders.add(MonitorPair(entry.key, entry.value.toString()));
}
var responseBody = response.data;
var responseContentType = response.headers.value('content-type') ?? "";
var responseContentLength = int.parse(response.headers.value('content-length') ?? "0");
var responseCode = response.statusCode;
//print("responseCode = $responseCode");
var mResponseBody;
if (responseBody == null) {
mResponseBody = null;
} else if (!response.requestOptions.receiveDataWhenStatusError ||
response.headers.value('content-encoding') == 'identity') {
mResponseBody = "";
} else {
// Handle reading and decoding the response body here
}
var curl = _cURLRepresentation(response.requestOptions);
var monitor = monitorMap[uuid];
// print("dio_process response accord uuid get info = url= ${monitor?.url} uuid = ${uuid} outerid = ${monitor?.outerId}");
/*print('responseHeaders: $responseHeaders');
print('responseBody: $responseBody');
print('responseContentType: $responseContentType');
print('responseContentLength: $responseContentLength');
print('mResponseBody: $mResponseBody');*/
var monitor2 = monitor?.copyWith(
responseCode: responseCode,
// Specify the fields to be updated
responseHeaders: jsonEncode(responseHeaders),
responseBody: jsonEncode(responseBody),
responseContentType:responseContentType,
responseContentLength:responseContentLength,
responseDate:DateTime.now().millisecondsSinceEpoch,
responseMessage:mResponseBody,
curl: curl
// Add more fields as needed
);
var monitorLocal = monitorLocalMap[uuid];
monitorLocal = monitorLocal?.copyWith(
responseCode: responseCode,
// Specify the fields to be updated
responseHeaders: jsonEncode(responseHeaders),
responseBody: jsonEncode(responseBody),
responseContentType:responseContentType,
responseContentLength:responseContentLength,
responseDate:DateTime.now().millisecondsSinceEpoch,
responseMessage:mResponseBody,
curl: curl
// Add more fields as needed
);
if(monitorLocal!=null){
monitorLocalMap[uuid] = monitorLocal;
}
monitor2?.id = monitor?.outerId;
//monitor2.id = channelDataBaseId;
try{
MethodChannel('dio_monitor').invokeMethod('updateRequest',{"message":jsonEncode(monitor2)}).then((value) {
//print("dio_process monitor_intercept send error updateRequest id = ${monitor2?.id} url= ${monitor2?.url}");
});
}catch(e){
}
MonitorDataBaseUtils.instance.getMonitorDaoBase().then((value) {
var uuid2 = response.requestOptions.extra["uuid"];
var monitorLocal = monitorLocalMap[uuid2];
var monitorCopy = monitorLocal?.copyWith();
if(monitorCopy!=null) {
print("网络请求后 id = ${monitorCopy.id} uuid2 = $uuid2 ");
value.updateValue(monitorCopy);
} });
/* MonitorDataBaseUtils.instance.getMonitorDaoBase().then((value) {
value.updateValue(monitor!).then((value) {
});
});*/
super.onResponse(response, handler);
print("request finish");
}