onResponse method

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

Called when the response is about to be resolved.

Implementation

@override
void onResponse(
  Response<dynamic> response,
  ResponseInterceptorHandler handler,
) {
  if (_shouldDropAnalytics(response.requestOptions)) {
    super.onResponse(response, handler);
    return;
  }

  final DateTime? startTime =
      response.requestOptions.extra['analytics_start_time'] as DateTime?;
  final Duration? duration =
      startTime != null ? DateTime.now().difference(startTime) : null;

  // 记录请求成功事件
  JunnyAnalyticsUtils.instance.trackNetworkRequest(
    event: JunnyNetworkRequestEvents.requestSuccess,
    data: <String, dynamic>{
      JunnyAnalyticsFields.requestUrl: response.requestOptions.uri.toString(),
      JunnyAnalyticsFields.requestMethod: response.requestOptions.method,
      JunnyAnalyticsFields.responseCode: response.statusCode,
      JunnyAnalyticsFields.duration: duration?.inMilliseconds,
      'response_size': _getResponseSize(response),
      'request_end_time': DateTime.now().toIso8601String(),
      JunnyAnalyticsFields.success: true,
    },
  );

  // 记录性能指标
  if (duration != null) {
    JunnyAnalyticsUtils.instance.trackPerformance(
      operationType: 'network_request',
      duration: duration,
      extraData: <String, dynamic>{
        JunnyAnalyticsFields.requestUrl:
            response.requestOptions.uri.toString(),
        JunnyAnalyticsFields.requestMethod: response.requestOptions.method,
        JunnyAnalyticsFields.responseCode: response.statusCode,
      },
    );
  }

  super.onResponse(response, handler);
}