RxBlocListener<B extends RxBlocTypeBase, S> constructor
- Key? key,
- required RxBlocWidgetListener<
S> listener, - required Stream<
S> state(- B
- B? bloc,
- RxBlocListenerCondition<
S> ? condition, - Widget child = const SizedBox(),
Takes a RxBlocWidgetListener 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 RxBlocBuilder.
If the bloc
parameter is omitted, RxBlocListener will automatically
perform a lookup using BlocProvider
and the current BuildContext
.
RxBlocListener<BlocA, String>(
state: (bloc) => bloc.state.details
listener: (context, state) {
// do stuff here based on BlocA's state
}
)
Only specify the bloc
if you wish to provide a bloc
that is otherwise
not accessible via RxBlocProvider and the current BuildContext
.
RxBlocListener<BlocAType, String>(
bloc: blocA,
state: (bloc) => bloc.state.details
listener: (context, state) {
// do stuff here based on BlocA's state
}
)
An optional condition
can be implemented for more granular control
over when listener
is called.
The condition
function will be invoked on each bloc
state
change.
The condition
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 RxBlocListener is initialized.
condition
is optional and if it isn't implemented,
it will default to true
.
RxBlocListener<BlocA, String>(
state: (bloc) => bloc.state.details,
condition: (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
}
)
Implementation
const RxBlocListener({
Key? key,
required RxBlocWidgetListener<S> listener,
required Stream<S> Function(B) state,
B? bloc,
RxBlocListenerCondition<S>? condition,
Widget child = const SizedBox(),
}) : super(
key: key,
child: child,
listener: listener,
bloc: bloc,
condition: condition,
state: state,
);