eventHandler method
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}');
}
}