Committed by
GitHub
Merge pull request #1520 from Bdaya-Dev/master
Improvements to router outlet
Showing
5 changed files
with
32 additions
and
58 deletions
@@ -22,7 +22,7 @@ class HomeView extends GetView<HomeController> { | @@ -22,7 +22,7 @@ class HomeView extends GetView<HomeController> { | ||
22 | return Scaffold( | 22 | return Scaffold( |
23 | body: GetRouterOutlet( | 23 | body: GetRouterOutlet( |
24 | name: Routes.HOME, | 24 | name: Routes.HOME, |
25 | - emptyPage: (delegate) => DashboardView(), | 25 | + emptyWidget: (delegate) => DashboardView(), |
26 | pickPages: (currentNavStack) { | 26 | pickPages: (currentNavStack) { |
27 | print('Home RouterOutlet: $currentNavStack'); | 27 | print('Home RouterOutlet: $currentNavStack'); |
28 | 28 |
@@ -20,24 +20,8 @@ class RootView extends GetView<RootController> { | @@ -20,24 +20,8 @@ class RootView extends GetView<RootController> { | ||
20 | ), | 20 | ), |
21 | body: GetRouterOutlet( | 21 | body: GetRouterOutlet( |
22 | name: '/', | 22 | name: '/', |
23 | - emptyPage: (delegate) { | ||
24 | - return Center( | ||
25 | - child: Column( | ||
26 | - mainAxisSize: MainAxisSize.min, | ||
27 | - children: [ | ||
28 | - Text('<<<< Select something from the drawer on the left'), | ||
29 | - Builder( | ||
30 | - builder: (context) => MaterialButton( | ||
31 | - child: Icon(Icons.open_in_new_outlined), | ||
32 | - onPressed: () { | ||
33 | - Scaffold.of(context).openDrawer(); | ||
34 | - }, | ||
35 | - ), | ||
36 | - ) | ||
37 | - ], | ||
38 | - ), | ||
39 | - ); | ||
40 | - }, | 23 | + emptyPage: (delegate) => |
24 | + Get.routeTree.matchRoute(Routes.HOME).route!, | ||
41 | pickPages: (currentNavStack) { | 25 | pickPages: (currentNavStack) { |
42 | //show all routes here except the root view | 26 | //show all routes here except the root view |
43 | print('Root RouterOutlet: $currentNavStack'); | 27 | print('Root RouterOutlet: $currentNavStack'); |
example_nav2/test/widget_test.dart
deleted
100644 → 0
@@ -100,10 +100,10 @@ class GetDelegate extends RouterDelegate<GetNavConfig> | @@ -100,10 +100,10 @@ class GetDelegate extends RouterDelegate<GetNavConfig> | ||
100 | history.add(config); | 100 | history.add(config); |
101 | } | 101 | } |
102 | 102 | ||
103 | - GetPageRoute getPageRoute(RouteSettings? settings) { | ||
104 | - return PageRedirect(settings ?? RouteSettings(name: '/404'), _notFound()) | ||
105 | - .page(); | ||
106 | - } | 103 | + // GetPageRoute getPageRoute(RouteSettings? settings) { |
104 | + // return PageRedirect(settings ?? RouteSettings(name: '/404'), _notFound()) | ||
105 | + // .page(); | ||
106 | + // } | ||
107 | 107 | ||
108 | GetNavConfig? _popHistory() { | 108 | GetNavConfig? _popHistory() { |
109 | if (!_canPopHistory()) return null; | 109 | if (!_canPopHistory()) return null; |
@@ -344,36 +344,25 @@ class GetDelegate extends RouterDelegate<GetNavConfig> | @@ -344,36 +344,25 @@ class GetDelegate extends RouterDelegate<GetNavConfig> | ||
344 | } | 344 | } |
345 | } | 345 | } |
346 | 346 | ||
347 | -class GetNavigator extends StatelessWidget { | ||
348 | - const GetNavigator({ | ||
349 | - Key? key, | ||
350 | - this.navigatorKey, | ||
351 | - required this.onPopPage, | ||
352 | - required this.pages, | ||
353 | - this.observers, | ||
354 | - this.transitionDelegate, | ||
355 | - required this.name, | ||
356 | - }) : super(key: key); | ||
357 | - final GlobalKey<NavigatorState>? navigatorKey; | ||
358 | - final bool Function(Route<dynamic>, dynamic) onPopPage; | ||
359 | - final List<Page> pages; | ||
360 | - final List<NavigatorObserver>? observers; | ||
361 | - final TransitionDelegate? transitionDelegate; | ||
362 | - final String name; | ||
363 | - | ||
364 | - @override | ||
365 | - Widget build(BuildContext context) { | ||
366 | - Get.key; | ||
367 | - return Navigator( | ||
368 | - key: navigatorKey ?? Get.nestedKey(name), | 347 | +class GetNavigator extends Navigator { |
348 | + GetNavigator({ | ||
349 | + GlobalKey<NavigatorState>? key, | ||
350 | + bool Function(Route<dynamic>, dynamic)? onPopPage, | ||
351 | + required List<Page> pages, | ||
352 | + List<NavigatorObserver>? observers, | ||
353 | + TransitionDelegate? transitionDelegate, | ||
354 | + String? name, | ||
355 | + }) : assert(key != null || name != null, | ||
356 | + 'GetNavigator should either have a key or a name set'), | ||
357 | + super( | ||
358 | + key: key ?? Get.nestedKey(name), | ||
369 | onPopPage: onPopPage, | 359 | onPopPage: onPopPage, |
370 | pages: pages, | 360 | pages: pages, |
371 | observers: [ | 361 | observers: [ |
372 | GetObserver(), | 362 | GetObserver(), |
373 | - if (observers != null) ...observers!, | 363 | + if (observers != null) ...observers, |
374 | ], | 364 | ], |
375 | transitionDelegate: | 365 | transitionDelegate: |
376 | transitionDelegate ?? const DefaultTransitionDelegate<dynamic>(), | 366 | transitionDelegate ?? const DefaultTransitionDelegate<dynamic>(), |
377 | ); | 367 | ); |
378 | - } | ||
379 | } | 368 | } |
@@ -89,29 +89,30 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, GetNavConfig> { | @@ -89,29 +89,30 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, GetNavConfig> { | ||
89 | ); | 89 | ); |
90 | 90 | ||
91 | GetRouterOutlet({ | 91 | GetRouterOutlet({ |
92 | - Widget Function(GetDelegate delegate)? emptyPage, | 92 | + Widget Function(GetDelegate delegate)? emptyWidget, |
93 | + GetPage Function(GetDelegate delegate)? emptyPage, | ||
93 | required List<GetPage> Function(GetNavConfig currentNavStack) pickPages, | 94 | required List<GetPage> Function(GetNavConfig currentNavStack) pickPages, |
94 | bool Function(Route<dynamic>, dynamic)? onPopPage, | 95 | bool Function(Route<dynamic>, dynamic)? onPopPage, |
95 | required String name, | 96 | required String name, |
96 | - }) : super( | 97 | + }) : assert( |
98 | + (emptyPage == null && emptyWidget == null) || | ||
99 | + (emptyPage != null && emptyWidget == null) || | ||
100 | + (emptyPage == null && emptyWidget != null), | ||
101 | + 'Either use emptyPage or emptyWidget'), | ||
102 | + super( | ||
97 | pageBuilder: (context, rDelegate, page) { | 103 | pageBuilder: (context, rDelegate, page) { |
98 | - final pageRoute = rDelegate.getPageRoute(page); | ||
99 | - | ||
100 | - if (page != null) { | 104 | + var pageRes = page ?? emptyPage?.call(rDelegate); |
105 | + if (pageRes != null) { | ||
101 | return GetNavigator( | 106 | return GetNavigator( |
102 | onPopPage: onPopPage ?? | 107 | onPopPage: onPopPage ?? |
103 | (a, c) { | 108 | (a, c) { |
104 | return true; | 109 | return true; |
105 | }, | 110 | }, |
106 | - pages: [page], | 111 | + pages: [pageRes], |
107 | name: name, | 112 | name: name, |
108 | ); | 113 | ); |
109 | } | 114 | } |
110 | - | ||
111 | - /// TODO: improve this logic abit | ||
112 | - return (emptyPage?.call(rDelegate) ?? | ||
113 | - pageRoute.page?.call() ?? | ||
114 | - SizedBox.shrink()); | 115 | + return (emptyWidget?.call(rDelegate) ?? SizedBox.shrink()); |
115 | }, | 116 | }, |
116 | pickPages: pickPages, | 117 | pickPages: pickPages, |
117 | delegate: Get.getDelegate(), | 118 | delegate: Get.getDelegate(), |
-
Please register or login to post a comment