eventHandler method

  1. @override
void eventHandler(
  1. Event event
)

Apply events to internal state (Eventador pattern) This method mutates _currentState directly as events are replayed or persisted.

Note: We override eventHandler instead of using the registry pattern. When overriding, we must call ensureStateInitialized() to replicate the base class initialization behavior that would normally happen before event application.

Implementation

@override
void eventHandler(Event event) {
  // Ensure state is initialized before processing events
  // This is critical during recovery when the first event is replayed
  ensureStateInitialized();

  if (event is! WalletEvent) {
    throw ArgumentError('Expected WalletEvent, got ${event.runtimeType}');
  }

  switch (event.runtimeType) {
    case WalletCreatedEvent:
      _applyWalletCreated(event as WalletCreatedEvent);
      break;
    case WalletConfigurationUpdatedEvent:
      _applyWalletConfigurationUpdated(event as WalletConfigurationUpdatedEvent);
      break;
    case AddressGeneratedEvent:
      _applyAddressGenerated(event as AddressGeneratedEvent);
      break;
    case AddressLabelUpdatedEvent:
      _applyAddressLabelUpdated(event as AddressLabelUpdatedEvent);
      break;
    case UTXOReceivedEvent:
      _applyUTXOReceived(event as UTXOReceivedEvent);
      break;
    case UTXOMarkedAvailableEvent:
      _applyUTXOMarkedAvailable(event as UTXOMarkedAvailableEvent);
      break;
    case UTXOSpentEvent:
      _applyUTXOSpent(event as UTXOSpentEvent);
      break;
    case UTXOConfirmationUpdatedEvent:
      _applyUTXOConfirmationUpdated(event as UTXOConfirmationUpdatedEvent);
      break;
    case TransactionSignedEvent:
      _applyTransactionSigned(event as TransactionSignedEvent);
      break;
    case TransactionBroadcastEvent:
      _applyTransactionBroadcast(event as TransactionBroadcastEvent);
      break;
    case UTXOReservationPlacedEvent:
      _applyUTXOReservationPlaced(event as UTXOReservationPlacedEvent);
      break;
    case UTXOReservationReleasedEvent:
      _applyUTXOReservationReleased(event as UTXOReservationReleasedEvent);
      break;
    case UTXOReservationExpiredEvent:
      _applyUTXOReservationExpired(event as UTXOReservationExpiredEvent);
      break;
    case UTXOReservedEvent:
      _applyUTXOReserved(event as UTXOReservedEvent);
      break;
    case UTXOReleasedEvent:
      _applyUTXOReleased(event as UTXOReleasedEvent);
      break;
    case UTXOReservationRenewedEvent:
      _applyUTXOReservationRenewed(event as UTXOReservationRenewedEvent);
      break;
    case WalletImportStartedEvent:
      _applyWalletImportStarted(event as WalletImportStartedEvent);
      break;
    case AddressDiscoveredEvent:
      _applyAddressDiscovered(event as AddressDiscoveredEvent);
      break;
    case TransactionImportedEvent:
      _applyTransactionImported(event as TransactionImportedEvent);
      break;
    case TransactionRecordedEvent:
      _applyTransactionRecorded(event as TransactionRecordedEvent);
      break;
    case TransactionConfirmedEvent:
      _applyTransactionConfirmed(event as TransactionConfirmedEvent);
      break;
    case WalletImportCompletedEvent:
      _applyWalletImportCompleted(event as WalletImportCompletedEvent);
      break;
    case WalletImportFailedEvent:
      _applyWalletImportFailed(event as WalletImportFailedEvent);
      break;
    case UTXOSplitInitiatedEvent:
      _applyUTXOSplitInitiated(event as UTXOSplitInitiatedEvent);
      break;
    case UTXOSplitCompletedEvent:
      _applyUTXOSplitCompleted(event as UTXOSplitCompletedEvent);
      break;
    case AllUTXOsSplitCompletedEvent:
      _applyAllUTXOsSplitCompleted(event as AllUTXOsSplitCompletedEvent);
      break;
    default:
      throw ArgumentError('Unknown event type: ${event.runtimeType}');
  }
}