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));
final previousOddCounterProvider = Provider((ref) {
final _counter = ref.watch(
counterProvider
.when((prev, curr) => prev & 2 == 1)
.select((state) => 2 * state),
);
return _counter;
});
Implementation
AlwaysAliveProviderListenable<S> when(ListenWhen<S> filter) {
_Ref<S>? val;
return select((curr) {
val = val?.update(curr) ?? _Ref(curr, filter);
return val!.aux;
}).select((_) => val!.last);
}