Line data Source code
1 : // ignore_for_file: invalid_use_of_protected_member
2 :
3 : import '../notifiers/state_notifier.dart';
4 : import 'base_provider.dart';
5 : import 'providers_container.dart';
6 :
7 : abstract class BaseStateNotifierProvider<N, S> {}
8 :
9 : abstract class ListeneableProvider<N extends StateNotifier<S>, S, A>
10 : extends BaseProvider<N, A> implements BaseStateNotifierProvider<N, S> {
11 3 : ListeneableProvider(
12 : super.callback, {
13 : super.autoDispose,
14 : });
15 :
16 3 : @override
17 : Element<N>? dispose({String? tag}) {
18 3 : final element = super.dispose(tag: tag);
19 :
20 3 : final notifier = element?.value;
21 : if (notifier != null) {
22 3 : notifier.dispose();
23 : }
24 : return element;
25 : }
26 :
27 3 : @override
28 : void onElementValueAssigned(Element<N> element, bool autoDispose) {
29 : if (autoDispose) {
30 6 : element.value?.setDisposableCallback(
31 6 : () => dispose(
32 6 : tag: element.ref.tag,
33 : ),
34 : );
35 : }
36 : }
37 : }
38 :
39 : class StateNotifierProvider<N extends StateNotifier<S>, S>
40 : extends ListeneableProvider<N, S, dynamic> {
41 3 : StateNotifierProvider(
42 : super.creator, {
43 : super.autoDispose,
44 : });
45 :
46 1 : static StateNotifierArgumentsProvider<N, S, A>
47 : withArguments<N extends StateNotifier<S>, S, A>(
48 : CreatorCallback<N, A> callback, {
49 : bool autoDispose = true,
50 : }) {
51 1 : return StateNotifierArgumentsProvider(
52 : callback,
53 : autoDispose: autoDispose,
54 : );
55 : }
56 : }
57 :
58 : class StateNotifierArgumentsProvider<N extends StateNotifier<S>, S, A>
59 : extends ListeneableProvider<N, S, A> {
60 1 : StateNotifierArgumentsProvider(
61 : super.creator, {
62 : super.autoDispose,
63 : });
64 : }
|