Jonny Borges
Committed by GitHub

Add files via upload

  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);
@@ -9,5 +9,6 @@ enum Transition { @@ -9,5 +9,6 @@ enum Transition {
9 size, 9 size,
10 rightToLeftWithFade, 10 rightToLeftWithFade,
11 leftToRightWithFade, 11 leftToRightWithFade,
12 - cupertino 12 + cupertino,
  13 + custom
13 } 14 }
  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: