/
widget_module.dart
105 lines (82 loc) · 2.09 KB
/
widget_module.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import 'package:flutter/widgets.dart';
import '../../flutter_modular.dart';
_debugPrintModular(String text) {
if (Modular.debugMode) {
debugPrint(text);
}
}
abstract class WidgetModule extends StatelessWidget implements ChildModule {
@override
List<Bind> get binds;
Widget get view;
final _FakeModule _fakeModule = _FakeModule();
WidgetModule() {
_fakeModule.changeBinds(binds);
}
@override
void changeBinds(List<Bind> b) {
_fakeModule.changeBinds(b);
}
@override
void cleanInjects() {
_fakeModule.cleanInjects();
}
@override
T getBind<T>(Map<String, dynamic> params, {List<Type> typesInRequest}) {
return _fakeModule.getBind<T>(params, typesInRequest: typesInRequest);
}
@override
List<String> get paths => [runtimeType.toString()];
@override
bool remove<T>() {
return _fakeModule.remove<T>();
}
@override
void instance() {
_fakeModule.instance();
}
@override
List<ModularRouter> get routers => null;
@override
Widget build(BuildContext context) {
return ModularProvider(
module: this,
child: view,
);
}
}
class _FakeModule extends ChildModule {
final List<Bind> bindsInject;
_FakeModule({String path, this.bindsInject}) {
paths.add(runtimeType.toString());
}
@override
List<Bind> get binds => bindsInject;
@override
List<ModularRouter> get routers => null;
}
class ModularProvider extends StatefulWidget {
final ChildModule module;
final Widget child;
const ModularProvider({Key key, this.module, this.child}) : super(key: key);
@override
_ModularProviderState createState() => _ModularProviderState();
}
class _ModularProviderState extends State<ModularProvider> {
@override
void initState() {
super.initState();
Modular.addCoreInit(widget.module);
_debugPrintModular("-- ${widget.module.runtimeType} INITIALIZED");
}
@override
Widget build(BuildContext context) {
return widget.child;
}
@override
void dispose() {
super.dispose();
Modular.removeModule(widget.module);
_debugPrintModular("-- ${widget.module.runtimeType} DISPOSED");
}
}