BlocListener<B extends StateStreamable<S>, S> constructor

const BlocListener<B extends StateStreamable<S>, S>({
  1. required BlocWidgetListener<S> listener,
  2. Key? key,
  3. B? bloc,
  4. BlocListenerCondition<S>? listenWhen,
  5. Widget? child,
})

Takes a BlocWidgetListener and an optional bloc and invokes the listener in response to state changes in the bloc. It should be used for functionality that needs to occur only in response to a state change such as navigation, showing a SnackBar, showing a Dialog, etc... The listener is guaranteed to only be called once for each state change unlike the builder in BlocBuilder.

If the bloc parameter is omitted, BlocListener will automatically perform a lookup using BlocProvider and the current BuildContext.

BlocListener<BlocA, BlocAState>(
  listener: (context, state) {
    // do stuff here based on BlocA's state
  },
  child: Container(),
)

Only specify the bloc if you wish to provide a bloc that is otherwise not accessible via BlocProvider and the current BuildContext.

BlocListener<BlocA, BlocAState>(
  value: blocA,
  listener: (context, state) {
    // do stuff here based on BlocA's state
  },
  child: Container(),
)

An optional listenWhen can be implemented for more granular control over when listener is called. listenWhen will be invoked on each bloc state change. listenWhen takes the previous state and current state and must return a bool which determines whether or not the listener function will be invoked. The previous state will be initialized to the state of the bloc when the BlocListener is initialized. listenWhen is optional and if omitted, it will default to true.

BlocListener<BlocA, BlocAState>(
  listenWhen: (previous, current) {
    // return true/false to determine whether or not
    // to invoke listener with state
  },
  listener: (context, state) {
    // do stuff here based on BlocA's state
  },
  child: Container(),
)

Implementation

const BlocListener({
  required BlocWidgetListener<S> listener,
  Key? key,
  B? bloc,
  BlocListenerCondition<S>? listenWhen,
  Widget? child,
}) : super(
        key: key,
        child: child,
        listener: listener,
        bloc: bloc,
        listenWhen: listenWhen,
      );