onError method

  1. @override
void onError(
  1. DioException err,
  2. ErrorInterceptorHandler handler
)

Called when an exception was occurred during the request.

Implementation

@override
void onError(DioException err, ErrorInterceptorHandler handler) {
  if (!NetworkLoggerConfig.isEnabled) {
    debugPrint('⚠️ CoteNetworkLogger: Logger is disabled');
    handler.next(err);
    return;
  }
  try {
    final transactionId = _requestTransactionIds.remove(err.requestOptions) ?? _generateTransactionId(err.requestOptions);
    NetworkLogStore.instance.upsertLog(transactionId, {
      'transactionId': transactionId,
      'type': 'error',
      'method': err.requestOptions.method,
      'url': err.requestOptions.uri.toString(),
      'statusCode': err.response?.statusCode,
      'headers': err.response?.headers.map,
      'body': err.response?.data,
      'error': err.message,
      'timestamp': DateTime.now().toIso8601String(),
      'status': 'error',
    });
    debugPrint('❌ CoteNetworkLogger: Intercepted error: ${err.message} for ${err.requestOptions.uri} (transactionId: $transactionId)');
    handler.next(err);
  } catch (e) {
    debugPrint('❌ CoteNetworkLogger: Failed to log error: $e');
    handler.next(err);
  }
}