Showing
8 changed files
with
55 additions
and
73 deletions
| 1 | -import 'package:example_nav2/app/modules/dashboard/controllers/dashboard_controller.dart'; | ||
| 2 | import 'package:flutter/material.dart'; | 1 | import 'package:flutter/material.dart'; |
| 3 | import 'package:get/get.dart'; | 2 | import 'package:get/get.dart'; |
| 4 | 3 | ||
| 5 | -import '../../home/controllers/home_controller.dart'; | 4 | +import '../controllers/dashboard_controller.dart'; |
| 5 | + | ||
| 6 | 6 | ||
| 7 | class DashboardView extends GetView<DashboardController> { | 7 | class DashboardView extends GetView<DashboardController> { |
| 8 | @override | 8 | @override |
| @@ -3,7 +3,6 @@ import 'package:get/get.dart'; | @@ -3,7 +3,6 @@ import 'package:get/get.dart'; | ||
| 3 | 3 | ||
| 4 | import '../../../routes/app_pages.dart'; | 4 | import '../../../routes/app_pages.dart'; |
| 5 | import '../controllers/home_controller.dart'; | 5 | import '../controllers/home_controller.dart'; |
| 6 | -import '../../dashboard/views/dashboard_view.dart'; | ||
| 7 | 6 | ||
| 8 | class HomeView extends GetView<HomeController> { | 7 | class HomeView extends GetView<HomeController> { |
| 9 | @override | 8 | @override |
| @@ -21,18 +20,11 @@ class HomeView extends GetView<HomeController> { | @@ -21,18 +20,11 @@ class HomeView extends GetView<HomeController> { | ||
| 21 | } | 20 | } |
| 22 | return Scaffold( | 21 | return Scaffold( |
| 23 | body: GetRouterOutlet( | 22 | body: GetRouterOutlet( |
| 24 | - name: Routes.HOME, | 23 | + initialRoute: Routes.DASHBOARD, |
| 24 | + // name: Routes.HOME, | ||
| 25 | //It's preferable to use emptyPage instead of emptyWidget | 25 | //It's preferable to use emptyPage instead of emptyWidget |
| 26 | - emptyPage: (delegate) => | ||
| 27 | - Get.routeTree.matchRoute(Routes.DASHBOARD).route!, | ||
| 28 | - pickPages: (currentNavStack) { | ||
| 29 | - print('Home RouterOutlet: $currentNavStack'); | ||
| 30 | - | ||
| 31 | - // will take any route after home | ||
| 32 | - final res = | ||
| 33 | - currentNavStack.currentTreeBranch.pickAfterRoute(Routes.HOME); | ||
| 34 | - return res; | ||
| 35 | - }, | 26 | + // emptyPage: (delegate) => |
| 27 | + // Get.routeTree.matchRoute(Routes.DASHBOARD).route!, | ||
| 36 | ), | 28 | ), |
| 37 | bottomNavigationBar: BottomNavigationBar( | 29 | bottomNavigationBar: BottomNavigationBar( |
| 38 | currentIndex: currentIndex, | 30 | currentIndex: currentIndex, |
| 1 | -import 'package:example_nav2/app/routes/app_pages.dart'; | ||
| 2 | import 'package:flutter/material.dart'; | 1 | import 'package:flutter/material.dart'; |
| 3 | - | ||
| 4 | import 'package:get/get.dart'; | 2 | import 'package:get/get.dart'; |
| 5 | 3 | ||
| 4 | +import '../../../routes/app_pages.dart'; | ||
| 6 | import '../controllers/profile_controller.dart'; | 5 | import '../controllers/profile_controller.dart'; |
| 7 | 6 | ||
| 8 | class ProfileView extends GetView<ProfileController> { | 7 | class ProfileView extends GetView<ProfileController> { |
| @@ -18,14 +18,7 @@ class RootView extends GetView<RootController> { | @@ -18,14 +18,7 @@ class RootView extends GetView<RootController> { | ||
| 18 | centerTitle: true, | 18 | centerTitle: true, |
| 19 | ), | 19 | ), |
| 20 | body: GetRouterOutlet( | 20 | body: GetRouterOutlet( |
| 21 | - name: 'rootView', | ||
| 22 | - emptyPage: (delegate) => | ||
| 23 | - Get.routeTree.matchRoute(Routes.HOME).route!, | ||
| 24 | - pickPages: (currentNavStack) { | ||
| 25 | - //show all routes here except the root view | ||
| 26 | - print('Root RouterOutlet: $currentNavStack'); | ||
| 27 | - return currentNavStack.currentTreeBranch.skip(1).take(1).toList(); | ||
| 28 | - }, | 21 | + initialRoute: Routes.HOME, |
| 29 | ), | 22 | ), |
| 30 | ); | 23 | ); |
| 31 | }, | 24 | }, |
| 1 | import 'package:get/get.dart'; | 1 | import 'package:get/get.dart'; |
| 2 | 2 | ||
| 3 | -import 'package:example_nav2/app/modules/dashboard/bindings/dashboard_binding.dart'; | ||
| 4 | -import 'package:example_nav2/app/modules/dashboard/views/dashboard_view.dart'; | ||
| 5 | - | ||
| 6 | import '../middleware/auth_middleware.dart'; | 3 | import '../middleware/auth_middleware.dart'; |
| 4 | +import '../modules/dashboard/bindings/dashboard_binding.dart'; | ||
| 5 | +import '../modules/dashboard/views/dashboard_view.dart'; | ||
| 7 | import '../modules/home/bindings/home_binding.dart'; | 6 | import '../modules/home/bindings/home_binding.dart'; |
| 8 | import '../modules/home/views/home_view.dart'; | 7 | import '../modules/home/views/home_view.dart'; |
| 9 | import '../modules/login/bindings/login_binding.dart'; | 8 | import '../modules/login/bindings/login_binding.dart'; |
| @@ -44,6 +43,7 @@ class AppPages { | @@ -44,6 +43,7 @@ class AppPages { | ||
| 44 | binding: LoginBinding(), | 43 | binding: LoginBinding(), |
| 45 | ), | 44 | ), |
| 46 | GetPage( | 45 | GetPage( |
| 46 | + participatesInRootNavigator: false, | ||
| 47 | preventDuplicates: true, | 47 | preventDuplicates: true, |
| 48 | name: _Paths.HOME, | 48 | name: _Paths.HOME, |
| 49 | page: () => HomeView(), | 49 | page: () => HomeView(), |
| @@ -280,7 +280,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig> | @@ -280,7 +280,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig> | ||
| 280 | final pages = getVisualPages(); | 280 | final pages = getVisualPages(); |
| 281 | final extraObservers = navigatorObservers; | 281 | final extraObservers = navigatorObservers; |
| 282 | return GetNavigator( | 282 | return GetNavigator( |
| 283 | - name: 'root', | ||
| 284 | key: navigatorKey, | 283 | key: navigatorKey, |
| 285 | onPopPage: _onPopVisualRoute, | 284 | onPopPage: _onPopVisualRoute, |
| 286 | pages: pages, | 285 | pages: pages, |
| @@ -420,14 +419,15 @@ class GetNavigator extends Navigator { | @@ -420,14 +419,15 @@ class GetNavigator extends Navigator { | ||
| 420 | List<NavigatorObserver>? observers, | 419 | List<NavigatorObserver>? observers, |
| 421 | bool reportsRouteUpdateToEngine = false, | 420 | bool reportsRouteUpdateToEngine = false, |
| 422 | TransitionDelegate? transitionDelegate, | 421 | TransitionDelegate? transitionDelegate, |
| 423 | - String? name, | 422 | + // String? name, |
| 424 | }) : super( | 423 | }) : super( |
| 425 | //keys should be optional | 424 | //keys should be optional |
| 426 | - key: key != null | ||
| 427 | - ? key | ||
| 428 | - : name != null | ||
| 429 | - ? Get.nestedKey(name) | ||
| 430 | - : null, | 425 | + key: key, |
| 426 | + // key != null | ||
| 427 | + // ? key | ||
| 428 | + // : name != null | ||
| 429 | + // ? Get.nestedKey(name) | ||
| 430 | + // : null, | ||
| 431 | onPopPage: onPopPage ?? | 431 | onPopPage: onPopPage ?? |
| 432 | (route, result) { | 432 | (route, result) { |
| 433 | final didPop = route.didPop(result); | 433 | final didPop = route.didPop(result); |
| @@ -439,7 +439,7 @@ class GetNavigator extends Navigator { | @@ -439,7 +439,7 @@ class GetNavigator extends Navigator { | ||
| 439 | reportsRouteUpdateToEngine: reportsRouteUpdateToEngine, | 439 | reportsRouteUpdateToEngine: reportsRouteUpdateToEngine, |
| 440 | pages: pages, | 440 | pages: pages, |
| 441 | observers: [ | 441 | observers: [ |
| 442 | - GetObserver(), | 442 | + // GetObserver(), |
| 443 | if (observers != null) ...observers, | 443 | if (observers != null) ...observers, |
| 444 | ], | 444 | ], |
| 445 | transitionDelegate: | 445 | transitionDelegate: |
| @@ -76,36 +76,17 @@ class _RouterOutletState<TDelegate extends RouterDelegate<T>, T extends Object> | @@ -76,36 +76,17 @@ class _RouterOutletState<TDelegate extends RouterDelegate<T>, T extends Object> | ||
| 76 | } | 76 | } |
| 77 | 77 | ||
| 78 | class GetRouterOutlet extends RouterOutlet<GetDelegate, GetNavConfig> { | 78 | class GetRouterOutlet extends RouterOutlet<GetDelegate, GetNavConfig> { |
| 79 | - GetRouterOutlet.builder({ | ||
| 80 | - required Widget Function( | ||
| 81 | - BuildContext context, | ||
| 82 | - GetDelegate delegate, | ||
| 83 | - GetNavConfig? currentRoute, | ||
| 84 | - ) | ||
| 85 | - builder, | ||
| 86 | - GetDelegate? routerDelegate, | ||
| 87 | - }) : super.builder( | ||
| 88 | - builder: builder, | ||
| 89 | - delegate: routerDelegate, | ||
| 90 | - ); | ||
| 91 | - | ||
| 92 | GetRouterOutlet({ | 79 | GetRouterOutlet({ |
| 80 | + required String initialRoute, | ||
| 93 | Widget Function(GetDelegate delegate)? emptyWidget, | 81 | Widget Function(GetDelegate delegate)? emptyWidget, |
| 94 | - GetPage Function(GetDelegate delegate)? emptyPage, | ||
| 95 | - required List<GetPage> Function(GetNavConfig currentNavStack) pickPages, | ||
| 96 | bool Function(Route<dynamic>, dynamic)? onPopPage, | 82 | bool Function(Route<dynamic>, dynamic)? onPopPage, |
| 97 | - String? name, | ||
| 98 | - }) : assert( | ||
| 99 | - (emptyPage == null && emptyWidget == null) || | ||
| 100 | - (emptyPage != null && emptyWidget == null) || | ||
| 101 | - (emptyPage == null && emptyWidget != null), | ||
| 102 | - 'Either use emptyPage or emptyWidget'), | ||
| 103 | - super( | 83 | + // String? name, |
| 84 | + }) : super( | ||
| 104 | pageBuilder: (context, rDelegate, pages) { | 85 | pageBuilder: (context, rDelegate, pages) { |
| 105 | - final pageRes = | ||
| 106 | - (pages ?? <GetPage<dynamic>?>[emptyPage?.call(rDelegate)]) | ||
| 107 | - .whereType<GetPage<dynamic>>() | ||
| 108 | - .toList(); | 86 | + final route = Get.routeTree.matchRoute(initialRoute); |
| 87 | + final pageRes = (pages ?? <GetPage<dynamic>?>[route.route]) | ||
| 88 | + .whereType<GetPage<dynamic>>() | ||
| 89 | + .toList(); | ||
| 109 | if (pageRes.length > 0) { | 90 | if (pageRes.length > 0) { |
| 110 | return GetNavigator( | 91 | return GetNavigator( |
| 111 | onPopPage: onPopPage ?? | 92 | onPopPage: onPopPage ?? |
| @@ -117,22 +98,41 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, GetNavConfig> { | @@ -117,22 +98,41 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, GetNavConfig> { | ||
| 117 | return true; | 98 | return true; |
| 118 | }, | 99 | }, |
| 119 | pages: pageRes, | 100 | pages: pageRes, |
| 120 | - name: name, | 101 | + //name: name, |
| 121 | ); | 102 | ); |
| 122 | } | 103 | } |
| 123 | return (emptyWidget?.call(rDelegate) ?? SizedBox.shrink()); | 104 | return (emptyWidget?.call(rDelegate) ?? SizedBox.shrink()); |
| 124 | }, | 105 | }, |
| 125 | - pickPages: pickPages, | 106 | + pickPages: (currentNavStack) { |
| 107 | + final length = Uri.parse(initialRoute).pathSegments.length; | ||
| 108 | + return currentNavStack.currentTreeBranch | ||
| 109 | + .skip(length) | ||
| 110 | + .take(length) | ||
| 111 | + .toList(); | ||
| 112 | + }, | ||
| 126 | delegate: Get.rootDelegate, | 113 | delegate: Get.rootDelegate, |
| 127 | ); | 114 | ); |
| 115 | + | ||
| 116 | + GetRouterOutlet.builder({ | ||
| 117 | + required Widget Function( | ||
| 118 | + BuildContext context, | ||
| 119 | + GetDelegate delegate, | ||
| 120 | + GetNavConfig? currentRoute, | ||
| 121 | + ) | ||
| 122 | + builder, | ||
| 123 | + GetDelegate? routerDelegate, | ||
| 124 | + }) : super.builder( | ||
| 125 | + builder: builder, | ||
| 126 | + delegate: routerDelegate, | ||
| 127 | + ); | ||
| 128 | } | 128 | } |
| 129 | 129 | ||
| 130 | -extension PagesListExt on List<GetPage> { | ||
| 131 | - List<GetPage> pickAtRoute(String route) { | ||
| 132 | - return skipWhile((value) => value.name != route).toList(); | ||
| 133 | - } | 130 | +// extension PagesListExt on List<GetPage> { |
| 131 | +// List<GetPage> pickAtRoute(String route) { | ||
| 132 | +// return skipWhile((value) => value.name != route).toList(); | ||
| 133 | +// } | ||
| 134 | 134 | ||
| 135 | - List<GetPage> pickAfterRoute(String route) { | ||
| 136 | - return skipWhile((value) => value.name != route).skip(1).toList(); | ||
| 137 | - } | ||
| 138 | -} | 135 | +// List<GetPage> pickAfterRoute(String route) { |
| 136 | +// return skipWhile((value) => value.name != route).skip(1).toList(); | ||
| 137 | +// } | ||
| 138 | +// } |
-
Please register or login to post a comment