import 'package:riverpod/riverpod.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; mixin AutoDisposeNotifierMixin on AnyNotifier { T get value => state; set value(T value) { state = value; } bool equals(T previous, T next) { return false; } @override bool updateShouldNotify(previous, next) { final res = !equals(previous, next) ? super.updateShouldNotify(previous, next) : true; if (res) { onUpdate(next); } return res; } void onUpdate(T value) {} void update(T? Function(T) builder) { final res = builder(value); if (res == null) { return; } value = res; } } mixin AsyncNotifierMixin on AnyNotifier, T> { T get value; set value(T value) { state = AsyncData(value); } }