Jonny Borges

add InheritedNavigator

@@ -8,7 +8,7 @@ FLUTTER_BUILD_NAME=1.0.0 @@ -8,7 +8,7 @@ FLUTTER_BUILD_NAME=1.0.0
8 FLUTTER_BUILD_NUMBER=1 8 FLUTTER_BUILD_NUMBER=1
9 EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386 9 EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386
10 EXCLUDED_ARCHS[sdk=iphoneos*]=armv7 10 EXCLUDED_ARCHS[sdk=iphoneos*]=armv7
11 -DART_DEFINES=RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==,RkxVVFRFUl9XRUJfQ0FOVkFTS0lUX1VSTD1odHRwczovL3d3dy5nc3RhdGljLmNvbS9mbHV0dGVyLWNhbnZhc2tpdC9iMjAxODNlMDQwOTYwOTRiY2MzN2Q5Y2RlMmE0Yjk2ZjVjYzY4NGNmLw== 11 +DART_DEFINES=RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==,RkxVVFRFUl9XRUJfQ0FOVkFTS0lUX1VSTD1odHRwczovL3d3dy5nc3RhdGljLmNvbS9mbHV0dGVyLWNhbnZhc2tpdC9iOGQzNTgxMGU5MWFiOGZjMzliYTVlN2E0MWJmZjZmNjk3ZThlM2E4Lw==
12 DART_OBFUSCATION=false 12 DART_OBFUSCATION=false
13 TRACK_WIDGET_CREATION=true 13 TRACK_WIDGET_CREATION=true
14 TREE_SHAKE_ICONS=false 14 TREE_SHAKE_ICONS=false
@@ -7,7 +7,7 @@ export "FLUTTER_TARGET=/Users/jonatasborges/getx5/getx/example_nav2/lib/main.dar @@ -7,7 +7,7 @@ export "FLUTTER_TARGET=/Users/jonatasborges/getx5/getx/example_nav2/lib/main.dar
7 export "FLUTTER_BUILD_DIR=build" 7 export "FLUTTER_BUILD_DIR=build"
8 export "FLUTTER_BUILD_NAME=1.0.0" 8 export "FLUTTER_BUILD_NAME=1.0.0"
9 export "FLUTTER_BUILD_NUMBER=1" 9 export "FLUTTER_BUILD_NUMBER=1"
10 -export "DART_DEFINES=RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==,RkxVVFRFUl9XRUJfQ0FOVkFTS0lUX1VSTD1odHRwczovL3d3dy5nc3RhdGljLmNvbS9mbHV0dGVyLWNhbnZhc2tpdC9iMjAxODNlMDQwOTYwOTRiY2MzN2Q5Y2RlMmE0Yjk2ZjVjYzY4NGNmLw==" 10 +export "DART_DEFINES=RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==,RkxVVFRFUl9XRUJfQ0FOVkFTS0lUX1VSTD1odHRwczovL3d3dy5nc3RhdGljLmNvbS9mbHV0dGVyLWNhbnZhc2tpdC9iOGQzNTgxMGU5MWFiOGZjMzliYTVlN2E0MWJmZjZmNjk3ZThlM2E4Lw=="
11 export "DART_OBFUSCATION=false" 11 export "DART_OBFUSCATION=false"
12 export "TRACK_WIDGET_CREATION=true" 12 export "TRACK_WIDGET_CREATION=true"
13 export "TREE_SHAKE_ICONS=false" 13 export "TREE_SHAKE_ICONS=false"
@@ -63,4 +63,3 @@ class HomeView extends GetView<HomeController> { @@ -63,4 +63,3 @@ class HomeView extends GetView<HomeController> {
63 ); 63 );
64 } 64 }
65 } 65 }
66 -  
@@ -37,7 +37,6 @@ class ProfileView extends GetView<ProfileController> { @@ -37,7 +37,6 @@ class ProfileView extends GetView<ProfileController> {
37 child: const Text('Show a test dialog in Home router outlet'), 37 child: const Text('Show a test dialog in Home router outlet'),
38 onPressed: () { 38 onPressed: () {
39 //shows a dialog 39 //shows a dialog
40 -  
41 Get.defaultDialog( 40 Get.defaultDialog(
42 title: 'Test Dialog In Home Outlet !!', 41 title: 'Test Dialog In Home Outlet !!',
43 barrierDismissible: true, 42 barrierDismissible: true,
@@ -75,6 +75,10 @@ class RouteDecoder { @@ -75,6 +75,10 @@ class RouteDecoder {
75 75
76 @override 76 @override
77 int get hashCode => currentTreeBranch.hashCode ^ pageSettings.hashCode; 77 int get hashCode => currentTreeBranch.hashCode ^ pageSettings.hashCode;
  78 +
  79 + @override
  80 + String toString() =>
  81 + 'RouteDecoder(currentTreeBranch: $currentTreeBranch, pageSettings: $pageSettings)';
78 } 82 }
79 83
80 class ParseRouteTree { 84 class ParseRouteTree {
@@ -127,18 +127,22 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> { @@ -127,18 +127,22 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> {
127 ].whereType<GetPage>(); 127 ].whereType<GetPage>();
128 128
129 if (pageRes.isNotEmpty) { 129 if (pageRes.isNotEmpty) {
130 - return GetNavigator(  
131 - restorationScopeId: restorationScopeId,  
132 - onPopPage: onPopPage ??  
133 - (route, result) {  
134 - final didPop = route.didPop(result);  
135 - if (!didPop) {  
136 - return false;  
137 - }  
138 - return true;  
139 - },  
140 - pages: pageRes.toList(),  
141 - key: navigatorKey, 130 + return InheritedNavigator(
  131 + navigatorKey: navigatorKey ??
  132 + Get.rootController.rootDelegate.navigatorKey,
  133 + child: GetNavigator(
  134 + restorationScopeId: restorationScopeId,
  135 + onPopPage: onPopPage ??
  136 + (route, result) {
  137 + final didPop = route.didPop(result);
  138 + if (!didPop) {
  139 + return false;
  140 + }
  141 + return true;
  142 + },
  143 + pages: pageRes.toList(),
  144 + key: navigatorKey,
  145 + ),
142 ); 146 );
143 } 147 }
144 return (emptyWidget?.call(rDelegate) ?? const SizedBox.shrink()); 148 return (emptyWidget?.call(rDelegate) ?? const SizedBox.shrink());
@@ -163,6 +167,30 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> { @@ -163,6 +167,30 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> {
163 ); 167 );
164 } 168 }
165 169
  170 +class InheritedNavigator extends InheritedWidget {
  171 + const InheritedNavigator({
  172 + super.key,
  173 + required super.child,
  174 + required this.navigatorKey,
  175 + });
  176 + final GlobalKey<NavigatorState> navigatorKey;
  177 +
  178 + static InheritedNavigator? of(BuildContext context) {
  179 + return context.dependOnInheritedWidgetOfExactType<InheritedNavigator>();
  180 + }
  181 +
  182 + @override
  183 + bool updateShouldNotify(InheritedNavigator oldWidget) {
  184 + return true;
  185 + }
  186 +}
  187 +
  188 +extension NavKeyExt on BuildContext {
  189 + GlobalKey<NavigatorState>? get parentNavigatorKey {
  190 + return InheritedNavigator.of(this)?.navigatorKey;
  191 + }
  192 +}
  193 +
166 extension PagesListExt on List<GetPage> { 194 extension PagesListExt on List<GetPage> {
167 /// Returns the route and all following routes after the given route. 195 /// Returns the route and all following routes after the given route.
168 Iterable<GetPage> pickFromRoute(String route) { 196 Iterable<GetPage> pickFromRoute(String route) {
@@ -225,7 +253,8 @@ mixin RouterListenerMixin<T extends StatefulWidget> on State<T> { @@ -225,7 +253,8 @@ mixin RouterListenerMixin<T extends StatefulWidget> on State<T> {
225 super.didChangeDependencies(); 253 super.didChangeDependencies();
226 disposer?.call(); 254 disposer?.call();
227 final router = Router.of(context); 255 final router = Router.of(context);
228 - delegate ??= router.routerDelegate; 256 + delegate ??= router.routerDelegate as GetDelegate;
  257 +
229 delegate?.addListener(_listener); 258 delegate?.addListener(_listener);
230 disposer = () => delegate?.removeListener(_listener); 259 disposer = () => delegate?.removeListener(_listener);
231 } 260 }