when method
Provides a when method like listenWhen
or buildWhen
in the
common BlocListener
or BlocBuilder
class CounterCubit extends Cubit<int> {
CounterCubit(super.state);
void increment() => emit(state + 1);
}
final counterProvider =
BlocProvider<CounterCubit, int>((ref) => CounterCubit(0));
Consumer(
builder: (context, ref, __) {
final _counter = ref.watch(
counterProvider
.when((prev, curr) => (curr + prev) % 5 == 0)
.select((state) => 2 * state),
);
return Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
);
},
)
Implementation
ProviderListenable<S> when(ListenWhen<S> filter) {
_Ref<S>? val;
return select((curr) {
val = val?.update(curr) ?? _Ref(curr, filter);
return val!.aux;
}).select((_) => val!.last);
}