when method

ProviderListenable<S> when(
  1. ListenWhen<S> filter
)

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);
}