Line data Source code
1 : import 'package:meta/meta.dart';
2 :
3 : import 'base_provider.dart';
4 : import 'providers_container.dart';
5 :
6 : class Provider<E> extends BaseProvider<E, dynamic> {
7 1 : Provider(super.callback);
8 :
9 1 : static ArgumentsProvider<E, A> withArguments<E, A>(
10 : CreatorCallback<E, A> callback,
11 : ) {
12 1 : return ArgumentsProvider<E, A>(callback);
13 : }
14 : }
15 :
16 : class ArgumentsProvider<E, A> extends BaseProvider<E, A> {
17 1 : ArgumentsProvider(super.callback);
18 : }
19 :
20 : abstract class BaseFactoryProvider<E, A> extends BaseProvider<E, A> {
21 1 : BaseFactoryProvider(super.callback);
22 :
23 1 : @override
24 : @visibleForTesting
25 : @protected
26 : E read({String? tag}) {
27 1 : throw AssertionError('read is not allowed for FactoryProviders');
28 : }
29 :
30 1 : @override
31 : @visibleForTesting
32 : @protected
33 : bool mounted({String? tag}) {
34 1 : throw AssertionError('mounted is not allowed for FactoryProviders');
35 : }
36 :
37 1 : @override
38 : @visibleForTesting
39 : @protected
40 : void setArguments(A args, {String? tag}) {
41 1 : throw AssertionError('setArguments is not allowed for FactoryProviders');
42 : }
43 :
44 1 : @override
45 : @visibleForTesting
46 : @protected
47 : Element<E>? dispose({String? tag}) {
48 1 : return super.dispose(tag: tag);
49 : }
50 : }
51 :
52 : class FactoryProvider<E> extends BaseFactoryProvider<E, dynamic> {
53 1 : FactoryProvider(super.callback);
54 :
55 1 : FactoryElement<E, dynamic> get() {
56 1 : final ref = Ref(tag: null);
57 :
58 1 : return FactoryElement<E, dynamic>(
59 : ref: ref,
60 1 : )..set(
61 3 : creator.callback(ref),
62 : );
63 : }
64 :
65 1 : static FactoryArgumentsProvider<E, A> withArguments<E, A>(
66 : CreatorCallback<E, A> creatorCallback,
67 : ) {
68 1 : return FactoryArgumentsProvider(
69 : creatorCallback,
70 : );
71 : }
72 : }
73 :
74 : class FactoryArgumentsProvider<E, A> extends BaseFactoryProvider<E, A> {
75 1 : FactoryArgumentsProvider(super.callback);
76 :
77 1 : FactoryElement<E, A> get(A args) {
78 2 : final ref = Ref<A>(tag: null)..setArguments(args);
79 :
80 1 : return FactoryElement<E, A>(
81 : ref: ref,
82 1 : )..set(
83 3 : creator.callback(ref),
84 : );
85 : }
86 : }
|