transition method

Transition<STATE, EVENT, SIDE_EFFECT> transition(
  1. EVENT event
)

Perform transition by emitting event.

Implementation

Transition<STATE, EVENT, SIDE_EFFECT> transition(EVENT event) {
  final fromState = _currentState;
  final transition = _getTransition(fromState, event);

  switch(transition._value) {
    case Invalid _:
      return transition;
    case Valid v:
      var onStateExit = _getOnStateExit(fromState);
      onStateExit?.call(fromState);
      _currentState = v.toState;
      var onStateEnter = _getOnStateEnter<STATE>(v.toState);
      onStateEnter?.call(v.toState);
      _controller.add(_currentState);
      for (var onTransition in _graph.onTransitionListeners) {
        onTransition(transition);
      }
      return transition;
  }
}