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 {
  //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");
}