changeNotifierAtom<T, N extends ChangeNotifier> function

AtomWithParent<T, Atom<N>> changeNotifierAtom<T, N extends ChangeNotifier>(
  1. AtomReader<N> create,
  2. T select(
    1. N notifier
    )
)

Create an AtomWithParent for a ChangeNotifier, which exposes a value using the given select function.

Implementation

AtomWithParent<T, Atom<N>> changeNotifierAtom<T, N extends ChangeNotifier>(
  AtomReader<N> create,
  T Function(N notifier) select,
) =>
    atomWithParent(atom((get) {
      final notifier = create(get);
      get.onDispose(notifier.dispose);
      return notifier;
    }), (get, parent) {
      final notifier = get(parent);

      void onChange() => get.setSelf(select(notifier));
      notifier.addListener(onChange);
      get.onDispose(() => notifier.removeListener(onChange));

      return select(notifier);
    });