dispatch method

void dispatch(
  1. TEvent event
)

Dispatch event

Implementation

void dispatch(TEvent event) {
  final handler = _handlers[event.runtimeType];
  if (handler == null) {
    Logger.warning('No handler registered for event type: ${event.runtimeType}');
    return;
  }

  try {
    final newState = handler(value.state, event);
    final newHistory = List<TEvent>.from(value.eventHistory);
    newHistory.add(event);

    // Limit history size
    if (newHistory.length > _maxHistorySize) {
      newHistory.removeAt(0);
    }

    Transaction.run(() {
      value = value.copyWith(
        state: newState,
        lastEvent: event,
        timestamp: DateTime.now(),
        eventHistory: newHistory,
      );
    });

    Logger.debug('Event dispatched: ${event.runtimeType}', event);
  } catch (e) {
    Logger.error('Error handling event: ${event.runtimeType}', e);
    rethrow;
  }
}