Showing
12 changed files
with
169 additions
and
91 deletions
1 | +## [2.5.10] | ||
2 | +- Removed remnants of previousArgs on routeObserver. | ||
3 | +This feature had been deprecated in previous updates, and was removed in version 2.5.8. Some remaining references on the routeObserver were causing exceptions in version 2.5.9, and were removed completely in version 2.5.10. | ||
4 | + | ||
5 | +## [2.5.9] | ||
6 | +- Fix Get.find with named instance | ||
7 | + | ||
1 | ## [2.5.8] | 8 | ## [2.5.8] |
2 | - Added docs | 9 | - Added docs |
3 | 10 |
@@ -8,8 +8,8 @@ export 'src/snackbar/snack_route.dart'; | @@ -8,8 +8,8 @@ export 'src/snackbar/snack_route.dart'; | ||
8 | export 'src/state/get_state.dart'; | 8 | export 'src/state/get_state.dart'; |
9 | export 'src/rx/rx_interface.dart'; | 9 | export 'src/rx/rx_interface.dart'; |
10 | export 'src/rx/rx_impl.dart'; | 10 | export 'src/rx/rx_impl.dart'; |
11 | +export 'src/rx/rx_event.dart'; | ||
11 | export 'src/rx/rx_getbuilder.dart'; | 12 | export 'src/rx/rx_getbuilder.dart'; |
12 | -export 'src/rx/rx_listview_builder.dart'; | ||
13 | export 'src/root/root_widget.dart'; | 13 | export 'src/root/root_widget.dart'; |
14 | export 'src/routes/default_route.dart'; | 14 | export 'src/routes/default_route.dart'; |
15 | export 'src/routes/get_route.dart'; | 15 | export 'src/routes/get_route.dart'; |
@@ -144,11 +144,6 @@ class Get { | @@ -144,11 +144,6 @@ class Get { | ||
144 | _get.global(id).currentState.pop(result); | 144 | _get.global(id).currentState.pop(result); |
145 | } | 145 | } |
146 | 146 | ||
147 | - // /// Experimental API to back from overlay | ||
148 | - // static void backE({dynamic result}) { | ||
149 | - // Navigator.pop(overlayContext); | ||
150 | - // } | ||
151 | - | ||
152 | /// It will close as many screens as you define. Times must be> 0; | 147 | /// It will close as many screens as you define. Times must be> 0; |
153 | static void close(int times, [int id]) { | 148 | static void close(int times, [int id]) { |
154 | if ((times == null) || (times < 1)) { | 149 | if ((times == null) || (times < 1)) { |
@@ -228,14 +223,13 @@ class Get { | @@ -228,14 +223,13 @@ class Get { | ||
228 | /// Api from showGeneralDialog with no context | 223 | /// Api from showGeneralDialog with no context |
229 | static Future<T> generalDialog<T>({ | 224 | static Future<T> generalDialog<T>({ |
230 | @required RoutePageBuilder pageBuilder, | 225 | @required RoutePageBuilder pageBuilder, |
231 | - bool barrierDismissible, | ||
232 | String barrierLabel, | 226 | String barrierLabel, |
233 | - Color barrierColor, | ||
234 | - Duration transitionDuration, | 227 | + bool barrierDismissible = true, |
228 | + Color barrierColor = const Color(0x80000000), | ||
229 | + Duration transitionDuration = const Duration(milliseconds: 200), | ||
235 | RouteTransitionsBuilder transitionBuilder, | 230 | RouteTransitionsBuilder transitionBuilder, |
236 | bool useRootNavigator = true, | 231 | bool useRootNavigator = true, |
237 | RouteSettings routeSettings, | 232 | RouteSettings routeSettings, |
238 | - // RouteSettings routeSettings | ||
239 | }) { | 233 | }) { |
240 | return showGeneralDialog( | 234 | return showGeneralDialog( |
241 | pageBuilder: pageBuilder, | 235 | pageBuilder: pageBuilder, |
@@ -555,6 +549,7 @@ class Get { | @@ -555,6 +549,7 @@ class Get { | ||
555 | if (instantInit) { | 549 | if (instantInit) { |
556 | getBar.show(); | 550 | getBar.show(); |
557 | } else { | 551 | } else { |
552 | + Get()._routing.isSnackbar = true; | ||
558 | SchedulerBinding.instance.addPostFrameCallback((_) { | 553 | SchedulerBinding.instance.addPostFrameCallback((_) { |
559 | getBar.show(); | 554 | getBar.show(); |
560 | }); | 555 | }); |
@@ -570,24 +565,24 @@ class Get { | @@ -570,24 +565,24 @@ class Get { | ||
570 | bool defaultGlobalState, | 565 | bool defaultGlobalState, |
571 | Transition defaultTransition}) { | 566 | Transition defaultTransition}) { |
572 | if (enableLog != null) { | 567 | if (enableLog != null) { |
573 | - _get._enableLog = enableLog; | 568 | + Get()._enableLog = enableLog; |
574 | } | 569 | } |
575 | if (defaultPopGesture != null) { | 570 | if (defaultPopGesture != null) { |
576 | - _get._defaultPopGesture = defaultPopGesture; | 571 | + Get()._defaultPopGesture = defaultPopGesture; |
577 | } | 572 | } |
578 | if (defaultOpaqueRoute != null) { | 573 | if (defaultOpaqueRoute != null) { |
579 | - _get._defaultOpaqueRoute = defaultOpaqueRoute; | 574 | + Get()._defaultOpaqueRoute = defaultOpaqueRoute; |
580 | } | 575 | } |
581 | if (defaultTransition != null) { | 576 | if (defaultTransition != null) { |
582 | - _get._defaultTransition = defaultTransition; | 577 | + Get()._defaultTransition = defaultTransition; |
583 | } | 578 | } |
584 | 579 | ||
585 | if (defaultDurationTransition != null) { | 580 | if (defaultDurationTransition != null) { |
586 | - _get._defaultDurationTransition = defaultDurationTransition; | 581 | + Get()._defaultDurationTransition = defaultDurationTransition; |
587 | } | 582 | } |
588 | 583 | ||
589 | if (defaultGlobalState != null) { | 584 | if (defaultGlobalState != null) { |
590 | - _get._defaultGlobalState = defaultGlobalState; | 585 | + Get()._defaultGlobalState = defaultGlobalState; |
591 | } | 586 | } |
592 | } | 587 | } |
593 | 588 | ||
@@ -756,6 +751,8 @@ class Get { | @@ -756,6 +751,8 @@ class Get { | ||
756 | static bool isRegistred<S>({String name}) => | 751 | static bool isRegistred<S>({String name}) => |
757 | Get()._singl.containsKey(_getKey(S, name)); | 752 | Get()._singl.containsKey(_getKey(S, name)); |
758 | 753 | ||
754 | + static bool isPrepared<S>() => Get()._factory.containsKey(S); | ||
755 | + | ||
759 | /// give access to Routing API from GetObserver | 756 | /// give access to Routing API from GetObserver |
760 | static Routing get routing => Get()._routing; | 757 | static Routing get routing => Get()._routing; |
761 | 758 | ||
@@ -790,8 +787,8 @@ class Get { | @@ -790,8 +787,8 @@ class Get { | ||
790 | 787 | ||
791 | static set obs(RxInterface observer) => Get()._obs = observer; | 788 | static set obs(RxInterface observer) => Get()._obs = observer; |
792 | 789 | ||
793 | - /// give arguments from previous route | ||
794 | - static get previousArguments => Get()._routing.previousArgs; | 790 | + // /// give arguments from previous route |
791 | + // static get previousArguments => Get()._routing.previousArgs; | ||
795 | 792 | ||
796 | /// give name from current route | 793 | /// give name from current route |
797 | static get currentRoute => Get()._routing.current; | 794 | static get currentRoute => Get()._routing.current; |
@@ -199,8 +199,9 @@ class GetMaterialApp extends StatelessWidget { | @@ -199,8 +199,9 @@ class GetMaterialApp extends StatelessWidget { | ||
199 | home: home, | 199 | home: home, |
200 | routes: routes ?? const <String, WidgetBuilder>{}, | 200 | routes: routes ?? const <String, WidgetBuilder>{}, |
201 | initialRoute: initialRoute, | 201 | initialRoute: initialRoute, |
202 | - onGenerateRoute: | ||
203 | - (namedRoutes == null ? onGenerateRoute : namedRoutesGenerate), | 202 | + onGenerateRoute: (namedRoutes == null || onUnknownRoute != null |
203 | + ? onGenerateRoute | ||
204 | + : namedRoutesGenerate), | ||
204 | onGenerateInitialRoutes: onGenerateInitialRoutes, | 205 | onGenerateInitialRoutes: onGenerateInitialRoutes, |
205 | onUnknownRoute: onUnknownRoute, | 206 | onUnknownRoute: onUnknownRoute, |
206 | navigatorObservers: (navigatorObservers == null | 207 | navigatorObservers: (navigatorObservers == null |
@@ -12,11 +12,12 @@ class GetRoute { | @@ -12,11 +12,12 @@ class GetRoute { | ||
12 | final Alignment alignment; | 12 | final Alignment alignment; |
13 | final bool maintainState; | 13 | final bool maintainState; |
14 | final bool opaque; | 14 | final bool opaque; |
15 | + final Widget customTransition; | ||
15 | final Duration transitionDuration; | 16 | final Duration transitionDuration; |
16 | final bool fullscreenDialog; | 17 | final bool fullscreenDialog; |
17 | final RouteSettings settings; | 18 | final RouteSettings settings; |
18 | 19 | ||
19 | - GetRoute({ | 20 | + const GetRoute({ |
20 | @required this.page, | 21 | @required this.page, |
21 | this.title, | 22 | this.title, |
22 | this.settings, | 23 | this.settings, |
@@ -28,6 +29,7 @@ class GetRoute { | @@ -28,6 +29,7 @@ class GetRoute { | ||
28 | this.transitionDuration = const Duration(milliseconds: 400), | 29 | this.transitionDuration = const Duration(milliseconds: 400), |
29 | this.popGesture, | 30 | this.popGesture, |
30 | this.transition, | 31 | this.transition, |
32 | + this.customTransition, | ||
31 | this.fullscreenDialog = false, | 33 | this.fullscreenDialog = false, |
32 | }) : assert(page != null), | 34 | }) : assert(page != null), |
33 | assert(maintainState != null), | 35 | assert(maintainState != null), |
@@ -3,21 +3,19 @@ import 'package:flutter/widgets.dart'; | @@ -3,21 +3,19 @@ import 'package:flutter/widgets.dart'; | ||
3 | import '../../get_main.dart'; | 3 | import '../../get_main.dart'; |
4 | 4 | ||
5 | class Routing { | 5 | class Routing { |
6 | - final current; | ||
7 | - final previous; | ||
8 | - final args; | ||
9 | - final previousArgs; | ||
10 | - final removed; | ||
11 | - final Route<dynamic> route; | ||
12 | - final bool isBack; | ||
13 | - final bool isSnackbar; | ||
14 | - final bool isBottomSheet; | ||
15 | - final bool isDialog; | 6 | + String current; |
7 | + String previous; | ||
8 | + Object args; | ||
9 | + String removed; | ||
10 | + Route<dynamic> route; | ||
11 | + bool isBack; | ||
12 | + bool isSnackbar; | ||
13 | + bool isBottomSheet; | ||
14 | + bool isDialog; | ||
16 | Routing({ | 15 | Routing({ |
17 | this.current, | 16 | this.current, |
18 | this.previous, | 17 | this.previous, |
19 | this.args, | 18 | this.args, |
20 | - this.previousArgs, | ||
21 | this.removed, | 19 | this.removed, |
22 | this.route, | 20 | this.route, |
23 | this.isBack, | 21 | this.isBack, |
@@ -37,6 +35,11 @@ class GetObserver extends NavigatorObserver { | @@ -37,6 +35,11 @@ class GetObserver extends NavigatorObserver { | ||
37 | bool isSnackbar; | 35 | bool isSnackbar; |
38 | bool isBottomSheet; | 36 | bool isBottomSheet; |
39 | bool isDialog; | 37 | bool isDialog; |
38 | + String current; | ||
39 | + String previous; | ||
40 | + Object args; | ||
41 | + // String previousArgs; | ||
42 | + String removed; | ||
40 | 43 | ||
41 | @override | 44 | @override |
42 | void didPush(Route<dynamic> route, Route<dynamic> previousRoute) { | 45 | void didPush(Route<dynamic> route, Route<dynamic> previousRoute) { |
@@ -53,6 +56,10 @@ class GetObserver extends NavigatorObserver { | @@ -53,6 +56,10 @@ class GetObserver extends NavigatorObserver { | ||
53 | isSnackbar = '${route?.settings?.name}' == 'snackbar'; | 56 | isSnackbar = '${route?.settings?.name}' == 'snackbar'; |
54 | isDialog = '${route?.settings?.name}' == 'dialog'; | 57 | isDialog = '${route?.settings?.name}' == 'dialog'; |
55 | isBottomSheet = '${route?.settings?.name}' == 'bottomsheet'; | 58 | isBottomSheet = '${route?.settings?.name}' == 'bottomsheet'; |
59 | + current = '${route?.settings?.name}'; | ||
60 | + previous = '${previousRoute?.settings?.name}'; | ||
61 | + args = route?.settings?.arguments; | ||
62 | + // previousArgs = previousRoute?.settings?.arguments; | ||
56 | 63 | ||
57 | final routeSend = Routing( | 64 | final routeSend = Routing( |
58 | removed: null, | 65 | removed: null, |
@@ -61,7 +68,7 @@ class GetObserver extends NavigatorObserver { | @@ -61,7 +68,7 @@ class GetObserver extends NavigatorObserver { | ||
61 | current: '${route?.settings?.name}', | 68 | current: '${route?.settings?.name}', |
62 | previous: '${previousRoute?.settings?.name}', | 69 | previous: '${previousRoute?.settings?.name}', |
63 | args: route?.settings?.arguments, | 70 | args: route?.settings?.arguments, |
64 | - previousArgs: previousRoute?.settings?.arguments, | 71 | + // previousArgs: previousRoute?.settings?.arguments, |
65 | isSnackbar: isSnackbar, | 72 | isSnackbar: isSnackbar, |
66 | isDialog: isDialog, | 73 | isDialog: isDialog, |
67 | isBottomSheet: isBottomSheet, | 74 | isBottomSheet: isBottomSheet, |
@@ -92,6 +99,10 @@ class GetObserver extends NavigatorObserver { | @@ -92,6 +99,10 @@ class GetObserver extends NavigatorObserver { | ||
92 | isSnackbar = false; | 99 | isSnackbar = false; |
93 | isDialog = false; | 100 | isDialog = false; |
94 | isBottomSheet = false; | 101 | isBottomSheet = false; |
102 | + current = '${previousRoute?.settings?.name}'; | ||
103 | + previous = '${route?.settings?.name}'; | ||
104 | + args = previousRoute?.settings?.arguments; | ||
105 | + // previousArgs = route?.settings?.arguments; | ||
95 | 106 | ||
96 | final routeSend = Routing( | 107 | final routeSend = Routing( |
97 | removed: null, | 108 | removed: null, |
@@ -100,7 +111,7 @@ class GetObserver extends NavigatorObserver { | @@ -100,7 +111,7 @@ class GetObserver extends NavigatorObserver { | ||
100 | current: '${previousRoute?.settings?.name}', | 111 | current: '${previousRoute?.settings?.name}', |
101 | previous: '${route?.settings?.name}', | 112 | previous: '${route?.settings?.name}', |
102 | args: previousRoute?.settings?.arguments, | 113 | args: previousRoute?.settings?.arguments, |
103 | - previousArgs: route?.settings?.arguments, | 114 | + // previousArgs: route?.settings?.arguments, |
104 | isSnackbar: false, //'${route?.settings?.name}' == 'snackbar', | 115 | isSnackbar: false, //'${route?.settings?.name}' == 'snackbar', |
105 | isDialog: false, //'${route?.settings?.name}' == 'dialog', | 116 | isDialog: false, //'${route?.settings?.name}' == 'dialog', |
106 | isBottomSheet: false, //'${route?.settings?.name}' == 'bottomsheet', | 117 | isBottomSheet: false, //'${route?.settings?.name}' == 'bottomsheet', |
@@ -129,10 +140,11 @@ class GetObserver extends NavigatorObserver { | @@ -129,10 +140,11 @@ class GetObserver extends NavigatorObserver { | ||
129 | current: '${newRoute?.settings?.name}', | 140 | current: '${newRoute?.settings?.name}', |
130 | previous: '${oldRoute?.settings?.name}', | 141 | previous: '${oldRoute?.settings?.name}', |
131 | args: newRoute?.settings?.arguments, | 142 | args: newRoute?.settings?.arguments, |
143 | + // previousArgs: newRoute?.settings?.arguments, | ||
132 | isSnackbar: false, | 144 | isSnackbar: false, |
133 | isBottomSheet: false, | 145 | isBottomSheet: false, |
134 | isDialog: false, | 146 | isDialog: false, |
135 | - previousArgs: null); | 147 | + ); |
136 | 148 | ||
137 | if (routing != null) { | 149 | if (routing != null) { |
138 | routing(routeSend); | 150 | routing(routeSend); |
@@ -144,17 +156,19 @@ class GetObserver extends NavigatorObserver { | @@ -144,17 +156,19 @@ class GetObserver extends NavigatorObserver { | ||
144 | void didRemove(Route route, Route previousRoute) { | 156 | void didRemove(Route route, Route previousRoute) { |
145 | super.didRemove(route, previousRoute); | 157 | super.didRemove(route, previousRoute); |
146 | if (Get.isLogEnable) print("[REMOVING ROUTE] ${route?.settings?.name}"); | 158 | if (Get.isLogEnable) print("[REMOVING ROUTE] ${route?.settings?.name}"); |
147 | - | ||
148 | final routeSend = Routing( | 159 | final routeSend = Routing( |
149 | isBack: false, | 160 | isBack: false, |
150 | route: previousRoute, | 161 | route: previousRoute, |
151 | - current: '${previousRoute?.settings?.name}', | 162 | + // current: '${previousRoute?.settings?.name}', |
163 | + current: current, | ||
164 | + args: args, | ||
152 | removed: '${route?.settings?.name}', | 165 | removed: '${route?.settings?.name}', |
166 | + // args: previousRoute?.settings?.arguments, | ||
153 | isSnackbar: isSnackbar, | 167 | isSnackbar: isSnackbar, |
154 | isBottomSheet: isBottomSheet, | 168 | isBottomSheet: isBottomSheet, |
155 | isDialog: isDialog, | 169 | isDialog: isDialog, |
156 | - args: previousRoute?.settings?.arguments, | ||
157 | - previousArgs: route?.settings?.arguments); | 170 | + // previousArgs: route?.settings?.arguments, |
171 | + ); | ||
158 | 172 | ||
159 | if (routing != null) { | 173 | if (routing != null) { |
160 | routing(routeSend); | 174 | routing(routeSend); |
lib/src/rx/rx_event.dart
0 → 100644
1 | +// import '../../get.dart'; | ||
2 | + | ||
3 | +// class Reaction extends Rx { | ||
4 | +// dynamic Function() listener; | ||
5 | +// void Function(dynamic) callback; | ||
6 | + | ||
7 | +// Reaction(this.listener, this.callback) : super() { | ||
8 | +// subject.stream.listen((_) { | ||
9 | +// callback(_); | ||
10 | +// }); | ||
11 | + | ||
12 | +// var previousObserver = Get.obs; | ||
13 | +// Get.obs = this; | ||
14 | +// listener(); | ||
15 | +// Get.obs = previousObserver; | ||
16 | +// } | ||
17 | + | ||
18 | +// void dispose() { | ||
19 | +// close(); | ||
20 | +// } | ||
21 | +// } | ||
22 | + | ||
23 | +// class When extends Rx { | ||
24 | +// dynamic Function() listener; | ||
25 | +// void Function(dynamic) callback; | ||
26 | + | ||
27 | +// When(this.listener, this.callback) : super() { | ||
28 | +// subject.stream.listen((_) { | ||
29 | +// callback(_); | ||
30 | +// dispose(); | ||
31 | +// }); | ||
32 | + | ||
33 | +// var previousObserver = Get.obs; | ||
34 | +// Get.obs = this; | ||
35 | +// listener(); | ||
36 | +// Get.obs = previousObserver; | ||
37 | +// } | ||
38 | + | ||
39 | +// void dispose() { | ||
40 | +// close(); | ||
41 | +// } | ||
42 | +// } |
@@ -7,21 +7,22 @@ import 'rx_interface.dart'; | @@ -7,21 +7,22 @@ import 'rx_interface.dart'; | ||
7 | class GetX<T extends RxController> extends StatefulWidget { | 7 | class GetX<T extends RxController> extends StatefulWidget { |
8 | final Widget Function(T) builder; | 8 | final Widget Function(T) builder; |
9 | final bool global; | 9 | final bool global; |
10 | - final Stream Function(T) stream; | ||
11 | - final StreamController Function(T) streamController; | 10 | + // final Stream Function(T) stream; |
11 | + // final StreamController Function(T) streamController; | ||
12 | final bool autoRemove; | 12 | final bool autoRemove; |
13 | final void Function(State state) initState, dispose, didChangeDependencies; | 13 | final void Function(State state) initState, dispose, didChangeDependencies; |
14 | final T init; | 14 | final T init; |
15 | - GetX( | ||
16 | - {this.builder, | 15 | + const GetX({ |
16 | + this.builder, | ||
17 | this.global = true, | 17 | this.global = true, |
18 | this.autoRemove = true, | 18 | this.autoRemove = true, |
19 | this.initState, | 19 | this.initState, |
20 | - this.stream, | 20 | + // this.stream, |
21 | this.dispose, | 21 | this.dispose, |
22 | this.didChangeDependencies, | 22 | this.didChangeDependencies, |
23 | this.init, | 23 | this.init, |
24 | - this.streamController}); | 24 | + // this.streamController |
25 | + }); | ||
25 | _GetXState<T> createState() => _GetXState<T>(); | 26 | _GetXState<T> createState() => _GetXState<T>(); |
26 | } | 27 | } |
27 | 28 | ||
@@ -29,6 +30,7 @@ class _GetXState<T extends RxController> extends State<GetX<T>> { | @@ -29,6 +30,7 @@ class _GetXState<T extends RxController> extends State<GetX<T>> { | ||
29 | RxInterface _observer; | 30 | RxInterface _observer; |
30 | StreamSubscription _listenSubscription; | 31 | StreamSubscription _listenSubscription; |
31 | T controller; | 32 | T controller; |
33 | + bool isCreator = false; | ||
32 | 34 | ||
33 | _GetXState() { | 35 | _GetXState() { |
34 | _observer = ListX(); | 36 | _observer = ListX(); |
@@ -37,21 +39,30 @@ class _GetXState<T extends RxController> extends State<GetX<T>> { | @@ -37,21 +39,30 @@ class _GetXState<T extends RxController> extends State<GetX<T>> { | ||
37 | @override | 39 | @override |
38 | void initState() { | 40 | void initState() { |
39 | if (widget.global) { | 41 | if (widget.global) { |
40 | - if (Get.isRegistred<T>()) { | 42 | + if (Get.isPrepared<T>()) { |
43 | + isCreator = true; | ||
44 | + controller = Get.find<T>(); | ||
45 | + } else if (Get.isRegistred<T>() && !Get.isPrepared<T>()) { | ||
41 | controller = Get.find<T>(); | 46 | controller = Get.find<T>(); |
47 | + isCreator = false; | ||
42 | } else { | 48 | } else { |
43 | controller = widget.init; | 49 | controller = widget.init; |
50 | + isCreator = true; | ||
44 | Get.put<T>(controller); | 51 | Get.put<T>(controller); |
45 | } | 52 | } |
46 | } else { | 53 | } else { |
47 | controller = widget.init; | 54 | controller = widget.init; |
55 | + isCreator = true; | ||
48 | } | 56 | } |
49 | if (widget.initState != null) widget.initState(this); | 57 | if (widget.initState != null) widget.initState(this); |
58 | + if (isCreator) { | ||
50 | try { | 59 | try { |
51 | controller?.onInit(); | 60 | controller?.onInit(); |
52 | } catch (e) { | 61 | } catch (e) { |
53 | if (Get.isLogEnable) print("Failure on call onInit"); | 62 | if (Get.isLogEnable) print("Failure on call onInit"); |
54 | } | 63 | } |
64 | + } | ||
65 | + | ||
55 | _listenSubscription = _observer.subject.stream.listen((data) { | 66 | _listenSubscription = _observer.subject.stream.listen((data) { |
56 | setState(() {}); | 67 | setState(() {}); |
57 | }); | 68 | }); |
@@ -62,15 +73,20 @@ class _GetXState<T extends RxController> extends State<GetX<T>> { | @@ -62,15 +73,20 @@ class _GetXState<T extends RxController> extends State<GetX<T>> { | ||
62 | void dispose() { | 73 | void dispose() { |
63 | if (widget.dispose != null) widget.dispose(this); | 74 | if (widget.dispose != null) widget.dispose(this); |
64 | 75 | ||
65 | - if (widget.init != null) { | 76 | + if (isCreator) { |
66 | if (widget.autoRemove && Get.isRegistred<T>()) { | 77 | if (widget.autoRemove && Get.isRegistred<T>()) { |
67 | controller.onClose(); | 78 | controller.onClose(); |
68 | Get.delete<T>(); | 79 | Get.delete<T>(); |
69 | } | 80 | } |
70 | - } | 81 | + } else { |
71 | controller.onClose(); | 82 | controller.onClose(); |
83 | + } | ||
84 | + // controller.onClose(); | ||
72 | _observer.close(); | 85 | _observer.close(); |
73 | _listenSubscription?.cancel(); | 86 | _listenSubscription?.cancel(); |
87 | + | ||
88 | + controller = null; | ||
89 | + isCreator = null; | ||
74 | super.dispose(); | 90 | super.dispose(); |
75 | } | 91 | } |
76 | 92 |
@@ -253,8 +253,6 @@ class ListX<E> extends DelegatingList<E> implements List<E>, RxInterface<E> { | @@ -253,8 +253,6 @@ class ListX<E> extends DelegatingList<E> implements List<E>, RxInterface<E> { | ||
253 | return this; | 253 | return this; |
254 | } | 254 | } |
255 | 255 | ||
256 | - // int get length => (value as List).length; | ||
257 | - | ||
258 | set value(E val) { | 256 | set value(E val) { |
259 | assign(val); | 257 | assign(val); |
260 | } | 258 | } |
@@ -4,11 +4,12 @@ import '../get_main.dart'; | @@ -4,11 +4,12 @@ import '../get_main.dart'; | ||
4 | class RealState { | 4 | class RealState { |
5 | final State state; | 5 | final State state; |
6 | final String id; | 6 | final String id; |
7 | - RealState({this.state, this.id}); | 7 | + final bool isCreator; |
8 | + const RealState({this.state, this.id, this.isCreator = false}); | ||
8 | } | 9 | } |
9 | 10 | ||
10 | class GetController extends State { | 11 | class GetController extends State { |
11 | - Map<int, List<RealState>> _allStates = {}; | 12 | + List<RealState> _allStates = []; |
12 | 13 | ||
13 | /// Update GetBuilder with update(this) | 14 | /// Update GetBuilder with update(this) |
14 | void update(GetController controller, | 15 | void update(GetController controller, |
@@ -16,15 +17,15 @@ class GetController extends State { | @@ -16,15 +17,15 @@ class GetController extends State { | ||
16 | if (controller == null || !condition) return; | 17 | if (controller == null || !condition) return; |
17 | 18 | ||
18 | if (ids == null) { | 19 | if (ids == null) { |
19 | - var all = _allStates[controller.hashCode]; | ||
20 | - all.forEach((rs) { | 20 | + // _allStates[controller.hashCode]; |
21 | + _allStates.forEach((rs) { | ||
21 | if (rs.state != null && rs.state.mounted) rs.state.setState(() {}); | 22 | if (rs.state != null && rs.state.mounted) rs.state.setState(() {}); |
22 | }); | 23 | }); |
23 | } else { | 24 | } else { |
24 | ids.forEach( | 25 | ids.forEach( |
25 | (s) { | 26 | (s) { |
26 | - var all = _allStates[controller.hashCode]; | ||
27 | - all.forEach((rs) { | 27 | + // var all = _allStates[controller.hashCode]; |
28 | + _allStates.forEach((rs) { | ||
28 | if (rs.state != null && rs.state.mounted && rs.id == s) | 29 | if (rs.state != null && rs.state.mounted && rs.id == s) |
29 | rs.state.setState(() {}); | 30 | rs.state.setState(() {}); |
30 | }); | 31 | }); |
@@ -49,7 +50,7 @@ class GetBuilder<T extends GetController> extends StatefulWidget { | @@ -49,7 +50,7 @@ class GetBuilder<T extends GetController> extends StatefulWidget { | ||
49 | final void Function(State state) initState, dispose, didChangeDependencies; | 50 | final void Function(State state) initState, dispose, didChangeDependencies; |
50 | final void Function(GetBuilder oldWidget, State state) didUpdateWidget; | 51 | final void Function(GetBuilder oldWidget, State state) didUpdateWidget; |
51 | final T init; | 52 | final T init; |
52 | - GetBuilder({ | 53 | + const GetBuilder({ |
53 | Key key, | 54 | Key key, |
54 | this.init, | 55 | this.init, |
55 | this.global = true, | 56 | this.global = true, |
@@ -68,69 +69,70 @@ class GetBuilder<T extends GetController> extends StatefulWidget { | @@ -68,69 +69,70 @@ class GetBuilder<T extends GetController> extends StatefulWidget { | ||
68 | 69 | ||
69 | class _GetBuilderState<T extends GetController> extends State<GetBuilder<T>> { | 70 | class _GetBuilderState<T extends GetController> extends State<GetBuilder<T>> { |
70 | T controller; | 71 | T controller; |
72 | + RealState real; | ||
73 | + bool isCreator = false; | ||
71 | @override | 74 | @override |
72 | void initState() { | 75 | void initState() { |
73 | super.initState(); | 76 | super.initState(); |
77 | + | ||
74 | if (widget.global) { | 78 | if (widget.global) { |
75 | - if (Get.isRegistred<T>()) { | 79 | + if (Get.isPrepared<T>()) { |
80 | + isCreator = true; | ||
76 | controller = Get.find<T>(); | 81 | controller = Get.find<T>(); |
77 | - if (controller._allStates[controller.hashCode] == null) { | ||
78 | - controller._allStates[controller.hashCode] = []; | ||
79 | - } | ||
80 | - controller._allStates[controller.hashCode] | ||
81 | - .add(RealState(state: this, id: widget.id)); | 82 | + |
83 | + real = RealState(state: this, id: widget.id, isCreator: isCreator); | ||
84 | + controller._allStates.add(real); | ||
85 | + } else if (Get.isRegistred<T>() && !Get.isPrepared<T>()) { | ||
86 | + controller = Get.find<T>(); | ||
87 | + isCreator = false; | ||
88 | + real = RealState(state: this, id: widget.id, isCreator: isCreator); | ||
89 | + controller._allStates.add(real); | ||
82 | } else { | 90 | } else { |
83 | controller = widget.init; | 91 | controller = widget.init; |
84 | - if (controller._allStates[controller.hashCode] == null) { | ||
85 | - controller._allStates[controller.hashCode] = []; | ||
86 | - } | ||
87 | - controller._allStates[controller.hashCode] | ||
88 | - .add(RealState(state: this, id: widget.id)); | 92 | + isCreator = true; |
93 | + | ||
94 | + real = RealState(state: this, id: widget.id, isCreator: isCreator); | ||
95 | + controller._allStates.add(real); | ||
89 | Get.put<T>(controller); | 96 | Get.put<T>(controller); |
90 | } | 97 | } |
91 | } else { | 98 | } else { |
92 | controller = widget.init; | 99 | controller = widget.init; |
93 | - if (controller._allStates[controller.hashCode] == null) { | ||
94 | - controller._allStates[controller.hashCode] = []; | ||
95 | - } | ||
96 | - controller._allStates[controller.hashCode] | ||
97 | - .add(RealState(state: this, id: widget.id)); | 100 | + |
101 | + isCreator = true; | ||
102 | + real = RealState(state: this, id: widget.id, isCreator: isCreator); | ||
103 | + controller._allStates.add(real); | ||
98 | } | 104 | } |
99 | if (widget.initState != null) widget.initState(this); | 105 | if (widget.initState != null) widget.initState(this); |
106 | + if (isCreator) { | ||
100 | try { | 107 | try { |
101 | controller?.onInit(); | 108 | controller?.onInit(); |
102 | } catch (e) { | 109 | } catch (e) { |
103 | if (Get.isLogEnable) print("Controller is not attach"); | 110 | if (Get.isLogEnable) print("Controller is not attach"); |
104 | } | 111 | } |
105 | } | 112 | } |
113 | + } | ||
106 | 114 | ||
107 | @override | 115 | @override |
108 | void dispose() async { | 116 | void dispose() async { |
109 | super.dispose(); | 117 | super.dispose(); |
110 | 118 | ||
111 | - if (widget.init != null) { | ||
112 | - var b = controller; | ||
113 | - if (b._allStates[controller.hashCode].hashCode == this.hashCode) { | ||
114 | - b._allStates.remove(controller.hashCode); | ||
115 | - } | ||
116 | - } else { | ||
117 | - var b = controller; | ||
118 | - if (b._allStates[controller.hashCode].hashCode == this.hashCode) { | ||
119 | - b._allStates.remove(controller.hashCode); | ||
120 | - } | ||
121 | - } | ||
122 | if (widget.dispose != null) widget.dispose(this); | 119 | if (widget.dispose != null) widget.dispose(this); |
123 | 120 | ||
124 | - if (widget.init != null) { | 121 | + if (isCreator) { |
125 | if (widget.autoRemove && Get.isRegistred<T>()) { | 122 | if (widget.autoRemove && Get.isRegistred<T>()) { |
126 | controller.onClose(); | 123 | controller.onClose(); |
124 | + controller._allStates.remove(real); | ||
127 | Get.delete<T>(); | 125 | Get.delete<T>(); |
128 | } | 126 | } |
129 | } else { | 127 | } else { |
130 | // controller._allStates[controller].remove(this); | 128 | // controller._allStates[controller].remove(this); |
131 | - controller._allStates[controller.hashCode] | ||
132 | - .remove(RealState(state: this, id: widget.id)); | 129 | + controller._allStates.remove(real); |
133 | } | 130 | } |
131 | + | ||
132 | + /// force GC remove this | ||
133 | + controller = null; | ||
134 | + real = null; | ||
135 | + isCreator = null; | ||
134 | } | 136 | } |
135 | 137 | ||
136 | @override | 138 | @override |
@@ -151,5 +153,3 @@ class _GetBuilderState<T extends GetController> extends State<GetBuilder<T>> { | @@ -151,5 +153,3 @@ class _GetBuilderState<T extends GetController> extends State<GetBuilder<T>> { | ||
151 | return widget.builder(controller); | 153 | return widget.builder(controller); |
152 | } | 154 | } |
153 | } | 155 | } |
154 | - | ||
155 | - |
1 | name: get | 1 | name: get |
2 | description: Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies easily with Get. | 2 | description: Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies easily with Get. |
3 | -version: 2.5.9 | 3 | +version: 2.5.10 |
4 | homepage: https://github.com/jonataslaw/get | 4 | homepage: https://github.com/jonataslaw/get |
5 | 5 | ||
6 | environment: | 6 | environment: |
-
Please register or login to post a comment