ignoreEvent method

System<State, Event> ignoreEvent({
  1. required bool when(
    1. State state,
    2. Event event
    ),
})

Ignore event based on current state and candidate event.

Usage Example

futureSystem
  .ignoreEvent(
    when: (state, event) => event is TriggerLoadData && state.loading
  ) 
  ...

Above code shown if the system is already in loading status, then upcoming TriggerLoadData event will be ignored.

API Overview

This operator will intercept candidate event if condition is met.

system
  .ignoreEvent(
    when: (state, event) { // --> describe if candidate event should be ignored
      // `state` is current state
      // `event` is candidate event
      // return true if we ignore the event
      // return false if we pass the event
      ...
    }
  )
  ...

Implementation

System<State, Event> ignoreEvent({
  required bool Function(State state, Event event) when,
}) => eventInterceptor<_IgnoreEventContext<State>>(
  createContext: () => _IgnoreEventContext(),
  updateContext: (context, state, oldState, event, dispatch) {
    context.state = state;
  },
  interceptor: (context, dispatch, event) {
    final shouldIgnoreEvent = when(context.state, event);
    if (!shouldIgnoreEvent) {
      dispatch(event);
    }
  }
);