Jonny Borges
Committed by GitHub

Merge pull request #1520 from Bdaya-Dev/master

Improvements to router outlet
... ... @@ -22,7 +22,7 @@ class HomeView extends GetView<HomeController> {
return Scaffold(
body: GetRouterOutlet(
name: Routes.HOME,
emptyPage: (delegate) => DashboardView(),
emptyWidget: (delegate) => DashboardView(),
pickPages: (currentNavStack) {
print('Home RouterOutlet: $currentNavStack');
... ...
... ... @@ -20,24 +20,8 @@ class RootView extends GetView<RootController> {
),
body: GetRouterOutlet(
name: '/',
emptyPage: (delegate) {
return Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text('<<<< Select something from the drawer on the left'),
Builder(
builder: (context) => MaterialButton(
child: Icon(Icons.open_in_new_outlined),
onPressed: () {
Scaffold.of(context).openDrawer();
},
),
)
],
),
);
},
emptyPage: (delegate) =>
Get.routeTree.matchRoute(Routes.HOME).route!,
pickPages: (currentNavStack) {
//show all routes here except the root view
print('Root RouterOutlet: $currentNavStack');
... ...
... ... @@ -100,10 +100,10 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
history.add(config);
}
GetPageRoute getPageRoute(RouteSettings? settings) {
return PageRedirect(settings ?? RouteSettings(name: '/404'), _notFound())
.page();
}
// GetPageRoute getPageRoute(RouteSettings? settings) {
// return PageRedirect(settings ?? RouteSettings(name: '/404'), _notFound())
// .page();
// }
GetNavConfig? _popHistory() {
if (!_canPopHistory()) return null;
... ... @@ -344,36 +344,25 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
}
}
class GetNavigator extends StatelessWidget {
const GetNavigator({
Key? key,
this.navigatorKey,
required this.onPopPage,
required this.pages,
this.observers,
this.transitionDelegate,
required this.name,
}) : super(key: key);
final GlobalKey<NavigatorState>? navigatorKey;
final bool Function(Route<dynamic>, dynamic) onPopPage;
final List<Page> pages;
final List<NavigatorObserver>? observers;
final TransitionDelegate? transitionDelegate;
final String name;
@override
Widget build(BuildContext context) {
Get.key;
return Navigator(
key: navigatorKey ?? Get.nestedKey(name),
onPopPage: onPopPage,
pages: pages,
observers: [
GetObserver(),
if (observers != null) ...observers!,
],
transitionDelegate:
transitionDelegate ?? const DefaultTransitionDelegate<dynamic>(),
);
}
class GetNavigator extends Navigator {
GetNavigator({
GlobalKey<NavigatorState>? key,
bool Function(Route<dynamic>, dynamic)? onPopPage,
required List<Page> pages,
List<NavigatorObserver>? observers,
TransitionDelegate? transitionDelegate,
String? name,
}) : assert(key != null || name != null,
'GetNavigator should either have a key or a name set'),
super(
key: key ?? Get.nestedKey(name),
onPopPage: onPopPage,
pages: pages,
observers: [
GetObserver(),
if (observers != null) ...observers,
],
transitionDelegate:
transitionDelegate ?? const DefaultTransitionDelegate<dynamic>(),
);
}
... ...
... ... @@ -89,29 +89,30 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, GetNavConfig> {
);
GetRouterOutlet({
Widget Function(GetDelegate delegate)? emptyPage,
Widget Function(GetDelegate delegate)? emptyWidget,
GetPage Function(GetDelegate delegate)? emptyPage,
required List<GetPage> Function(GetNavConfig currentNavStack) pickPages,
bool Function(Route<dynamic>, dynamic)? onPopPage,
required String name,
}) : super(
}) : assert(
(emptyPage == null && emptyWidget == null) ||
(emptyPage != null && emptyWidget == null) ||
(emptyPage == null && emptyWidget != null),
'Either use emptyPage or emptyWidget'),
super(
pageBuilder: (context, rDelegate, page) {
final pageRoute = rDelegate.getPageRoute(page);
if (page != null) {
var pageRes = page ?? emptyPage?.call(rDelegate);
if (pageRes != null) {
return GetNavigator(
onPopPage: onPopPage ??
(a, c) {
return true;
},
pages: [page],
pages: [pageRes],
name: name,
);
}
/// TODO: improve this logic abit
return (emptyPage?.call(rDelegate) ??
pageRoute.page?.call() ??
SizedBox.shrink());
return (emptyWidget?.call(rDelegate) ?? SizedBox.shrink());
},
pickPages: pickPages,
delegate: Get.getDelegate(),
... ...