Jonny Borges

change nav 2 api

import 'package:example_nav2/app/modules/dashboard/controllers/dashboard_controller.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../home/controllers/home_controller.dart';
import '../controllers/dashboard_controller.dart';
class DashboardView extends GetView<DashboardController> {
@override
... ...
import 'dart:async';
import 'package:get/get.dart';
class HomeController extends GetxController {}
... ...
... ... @@ -3,7 +3,6 @@ import 'package:get/get.dart';
import '../../../routes/app_pages.dart';
import '../controllers/home_controller.dart';
import '../../dashboard/views/dashboard_view.dart';
class HomeView extends GetView<HomeController> {
@override
... ... @@ -21,18 +20,11 @@ class HomeView extends GetView<HomeController> {
}
return Scaffold(
body: GetRouterOutlet(
name: Routes.HOME,
initialRoute: Routes.DASHBOARD,
// name: Routes.HOME,
//It's preferable to use emptyPage instead of emptyWidget
emptyPage: (delegate) =>
Get.routeTree.matchRoute(Routes.DASHBOARD).route!,
pickPages: (currentNavStack) {
print('Home RouterOutlet: $currentNavStack');
// will take any route after home
final res =
currentNavStack.currentTreeBranch.pickAfterRoute(Routes.HOME);
return res;
},
// emptyPage: (delegate) =>
// Get.routeTree.matchRoute(Routes.DASHBOARD).route!,
),
bottomNavigationBar: BottomNavigationBar(
currentIndex: currentIndex,
... ...
import 'package:example_nav2/app/routes/app_pages.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../../routes/app_pages.dart';
import '../controllers/profile_controller.dart';
class ProfileView extends GetView<ProfileController> {
... ...
... ... @@ -18,14 +18,7 @@ class RootView extends GetView<RootController> {
centerTitle: true,
),
body: GetRouterOutlet(
name: 'rootView',
emptyPage: (delegate) =>
Get.routeTree.matchRoute(Routes.HOME).route!,
pickPages: (currentNavStack) {
//show all routes here except the root view
print('Root RouterOutlet: $currentNavStack');
return currentNavStack.currentTreeBranch.skip(1).take(1).toList();
},
initialRoute: Routes.HOME,
),
);
},
... ...
import 'package:get/get.dart';
import 'package:example_nav2/app/modules/dashboard/bindings/dashboard_binding.dart';
import 'package:example_nav2/app/modules/dashboard/views/dashboard_view.dart';
import '../middleware/auth_middleware.dart';
import '../modules/dashboard/bindings/dashboard_binding.dart';
import '../modules/dashboard/views/dashboard_view.dart';
import '../modules/home/bindings/home_binding.dart';
import '../modules/home/views/home_view.dart';
import '../modules/login/bindings/login_binding.dart';
... ... @@ -44,6 +43,7 @@ class AppPages {
binding: LoginBinding(),
),
GetPage(
participatesInRootNavigator: false,
preventDuplicates: true,
name: _Paths.HOME,
page: () => HomeView(),
... ...
... ... @@ -280,7 +280,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
final pages = getVisualPages();
final extraObservers = navigatorObservers;
return GetNavigator(
name: 'root',
key: navigatorKey,
onPopPage: _onPopVisualRoute,
pages: pages,
... ... @@ -420,14 +419,15 @@ class GetNavigator extends Navigator {
List<NavigatorObserver>? observers,
bool reportsRouteUpdateToEngine = false,
TransitionDelegate? transitionDelegate,
String? name,
// String? name,
}) : super(
//keys should be optional
key: key != null
? key
: name != null
? Get.nestedKey(name)
: null,
key: key,
// key != null
// ? key
// : name != null
// ? Get.nestedKey(name)
// : null,
onPopPage: onPopPage ??
(route, result) {
final didPop = route.didPop(result);
... ... @@ -439,7 +439,7 @@ class GetNavigator extends Navigator {
reportsRouteUpdateToEngine: reportsRouteUpdateToEngine,
pages: pages,
observers: [
GetObserver(),
// GetObserver(),
if (observers != null) ...observers,
],
transitionDelegate:
... ...
... ... @@ -76,36 +76,17 @@ class _RouterOutletState<TDelegate extends RouterDelegate<T>, T extends Object>
}
class GetRouterOutlet extends RouterOutlet<GetDelegate, GetNavConfig> {
GetRouterOutlet.builder({
required Widget Function(
BuildContext context,
GetDelegate delegate,
GetNavConfig? currentRoute,
)
builder,
GetDelegate? routerDelegate,
}) : super.builder(
builder: builder,
delegate: routerDelegate,
);
GetRouterOutlet({
required String initialRoute,
Widget Function(GetDelegate delegate)? emptyWidget,
GetPage Function(GetDelegate delegate)? emptyPage,
required List<GetPage> Function(GetNavConfig currentNavStack) pickPages,
bool Function(Route<dynamic>, dynamic)? onPopPage,
String? name,
}) : assert(
(emptyPage == null && emptyWidget == null) ||
(emptyPage != null && emptyWidget == null) ||
(emptyPage == null && emptyWidget != null),
'Either use emptyPage or emptyWidget'),
super(
// String? name,
}) : super(
pageBuilder: (context, rDelegate, pages) {
final pageRes =
(pages ?? <GetPage<dynamic>?>[emptyPage?.call(rDelegate)])
.whereType<GetPage<dynamic>>()
.toList();
final route = Get.routeTree.matchRoute(initialRoute);
final pageRes = (pages ?? <GetPage<dynamic>?>[route.route])
.whereType<GetPage<dynamic>>()
.toList();
if (pageRes.length > 0) {
return GetNavigator(
onPopPage: onPopPage ??
... ... @@ -117,22 +98,41 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, GetNavConfig> {
return true;
},
pages: pageRes,
name: name,
//name: name,
);
}
return (emptyWidget?.call(rDelegate) ?? SizedBox.shrink());
},
pickPages: pickPages,
pickPages: (currentNavStack) {
final length = Uri.parse(initialRoute).pathSegments.length;
return currentNavStack.currentTreeBranch
.skip(length)
.take(length)
.toList();
},
delegate: Get.rootDelegate,
);
GetRouterOutlet.builder({
required Widget Function(
BuildContext context,
GetDelegate delegate,
GetNavConfig? currentRoute,
)
builder,
GetDelegate? routerDelegate,
}) : super.builder(
builder: builder,
delegate: routerDelegate,
);
}
extension PagesListExt on List<GetPage> {
List<GetPage> pickAtRoute(String route) {
return skipWhile((value) => value.name != route).toList();
}
// extension PagesListExt on List<GetPage> {
// List<GetPage> pickAtRoute(String route) {
// return skipWhile((value) => value.name != route).toList();
// }
List<GetPage> pickAfterRoute(String route) {
return skipWhile((value) => value.name != route).skip(1).toList();
}
}
// List<GetPage> pickAfterRoute(String route) {
// return skipWhile((value) => value.name != route).skip(1).toList();
// }
// }
... ...