Committed by
GitHub
Merge pull request #1520 from Bdaya-Dev/master
Improvements to router outlet
Showing
5 changed files
with
40 additions
and
66 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), | ||
| 369 | - onPopPage: onPopPage, | ||
| 370 | - pages: pages, | ||
| 371 | - observers: [ | ||
| 372 | - GetObserver(), | ||
| 373 | - if (observers != null) ...observers!, | ||
| 374 | - ], | ||
| 375 | - transitionDelegate: | ||
| 376 | - transitionDelegate ?? const DefaultTransitionDelegate<dynamic>(), | ||
| 377 | - ); | ||
| 378 | - } | 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), | ||
| 359 | + onPopPage: onPopPage, | ||
| 360 | + pages: pages, | ||
| 361 | + observers: [ | ||
| 362 | + GetObserver(), | ||
| 363 | + if (observers != null) ...observers, | ||
| 364 | + ], | ||
| 365 | + transitionDelegate: | ||
| 366 | + transitionDelegate ?? const DefaultTransitionDelegate<dynamic>(), | ||
| 367 | + ); | ||
| 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