2025-02-09 18:39:38 +08:00
|
|
|
import 'package:riverpod/riverpod.dart';
|
2025-07-31 17:09:18 +08:00
|
|
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
2025-02-09 18:39:38 +08:00
|
|
|
|
2025-07-31 17:09:18 +08:00
|
|
|
mixin AutoDisposeNotifierMixin<T> on AnyNotifier<T, T> {
|
2025-12-16 11:23:09 +08:00
|
|
|
T get value => state;
|
|
|
|
|
|
2025-02-09 18:39:38 +08:00
|
|
|
set value(T value) {
|
2025-12-16 11:23:09 +08:00
|
|
|
state = value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool equals(T previous, T next) {
|
|
|
|
|
return false;
|
2025-02-09 18:39:38 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
bool updateShouldNotify(previous, next) {
|
2025-12-16 11:23:09 +08:00
|
|
|
final res = !equals(previous, next)
|
|
|
|
|
? super.updateShouldNotify(previous, next)
|
|
|
|
|
: true;
|
2025-02-09 18:39:38 +08:00
|
|
|
if (res) {
|
|
|
|
|
onUpdate(next);
|
|
|
|
|
}
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-07 01:48:34 +08:00
|
|
|
void onUpdate(T value) {}
|
2025-10-14 15:13:52 +08:00
|
|
|
|
2025-12-16 11:23:09 +08:00
|
|
|
void update(T? Function(T) builder) {
|
|
|
|
|
final res = builder(value);
|
|
|
|
|
if (res == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
value = res;
|
2025-10-14 15:13:52 +08:00
|
|
|
}
|
2025-02-09 18:39:38 +08:00
|
|
|
}
|
|
|
|
|
|
2025-12-16 11:23:09 +08:00
|
|
|
mixin AsyncNotifierMixin<T> on AnyNotifier<AsyncValue<T>, T> {
|
2025-07-31 17:09:18 +08:00
|
|
|
T get value;
|
|
|
|
|
|
|
|
|
|
set value(T value) {
|
2025-12-16 11:23:09 +08:00
|
|
|
state = AsyncData(value);
|
2025-07-31 17:09:18 +08:00
|
|
|
}
|
|
|
|
|
}
|