Jonny Borges

change getDelegate to rootDelegate, and make informationParser and routeDelegate…

… of GetX default on GetMaterialApp
... ... @@ -28,33 +28,37 @@ class MyApp extends StatelessWidget {
}
}
// Navigator 2 example, WIP
// TODO: add all methods from NavigatorExtension to GetNav
/// Nav 2 snippet
// void main() {
// runApp(MyApp());
// }
// class MyApp extends StatelessWidget {
// MyApp({Key? key}) : super(key: key);
// final getNav = Get.put(
// GetNav(pages: [
// GetPage(name: '/first', page: () => First()),
// GetPage(name: '/second', page: () => Second()),
// GetPage(name: '/third', page: () => Third()),
// ]),
// );
// @override
// Widget build(BuildContext context) {
// return GetMaterialApp.router(
// getPages: [
// GetPage(
// participatesInRootNavigator: true,
// name: '/first',
// page: () => First()),
// GetPage(
// name: '/second',
// page: () => Second(),
// ),
// GetPage(
// name: '/third',
// page: () => Third(),
// ),
// ],
// debugShowCheckedModeBanner: false,
// routeInformationParser: getNav.routeInformationParser,
// routerDelegate: getNav.routerDelegate,
// );
// }
// }
// class First extends StatelessWidget {
// final GetNav getNav = Get.find();
// @override
// Widget build(BuildContext context) {
// return Scaffold(
... ... @@ -73,9 +77,7 @@ class MyApp extends StatelessWidget {
// height: 300,
// width: 300,
// child: ElevatedButton(
// onPressed: () {
// getNav.toNamed('/second?id=584305');
// },
// onPressed: () {},
// child: Text('next screen'),
// ),
// ),
... ... @@ -85,7 +87,6 @@ class MyApp extends StatelessWidget {
// }
// class Second extends StatelessWidget {
// final GetNav getNav = Get.find();
// @override
// Widget build(BuildContext context) {
// return Scaffold(
... ... @@ -97,9 +98,7 @@ class MyApp extends StatelessWidget {
// height: 300,
// width: 300,
// child: ElevatedButton(
// onPressed: () {
// getNav.toNamed('/third');
// },
// onPressed: () {},
// child: Text('next screen'),
// ),
// ),
... ... @@ -109,7 +108,6 @@ class MyApp extends StatelessWidget {
// }
// class Third extends StatelessWidget {
// final GetNav getNav = Get.find();
// @override
// Widget build(BuildContext context) {
// return Scaffold(
... ... @@ -122,9 +120,7 @@ class MyApp extends StatelessWidget {
// height: 300,
// width: 300,
// child: ElevatedButton(
// onPressed: () {
// getNav.offUntil('/first');
// },
// onPressed: () {},
// child: Text('go to first screen'),
// ),
// ),
... ...
import 'package:example_nav2/app/routes/app_pages.dart';
import 'package:example_nav2/services/auth_service.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../../../services/auth_service.dart';
import '../../../routes/app_pages.dart';
import '../controllers/login_controller.dart';
class LoginView extends GetView<LoginController> {
... ... @@ -32,11 +31,9 @@ class LoginView extends GetView<LoginController> {
),
onPressed: () {
AuthService.to.login();
final thenTo = Get.getDelegate()!
.currentConfiguration!
.currentPage!
.parameter?['then'];
Get.getDelegate()!.toNamed(thenTo ?? Routes.HOME);
final thenTo = Get.rootDelegate.currentConfiguration!
.currentPage!.parameter?['then'];
Get.rootDelegate.toNamed(thenTo ?? Routes.HOME);
},
),
],
... ...
import 'package:example_nav2/models/demo_product.dart';
import 'package:get/get.dart';
import '../../../../models/demo_product.dart';
class ProductsController extends GetxController {
final products = <DemoProduct>[].obs;
... ...
... ... @@ -24,7 +24,7 @@ class ProductsView extends GetView<ProductsController> {
final item = controller.products[index];
return ListTile(
onTap: () {
Get.getDelegate()?.toNamed(Routes.PRODUCT_DETAILS(item.id));
Get.rootDelegate.toNamed(Routes.PRODUCT_DETAILS(item.id));
},
title: Text(item.name),
subtitle: Text(item.id),
... ...
... ... @@ -21,7 +21,7 @@ class DrawerWidget extends StatelessWidget {
ListTile(
title: Text('Home'),
onTap: () {
Get.getDelegate()?.toNamed(Routes.HOME);
Get.rootDelegate.toNamed(Routes.HOME);
//to close the drawer
Navigator.of(context).pop();
... ... @@ -30,7 +30,7 @@ class DrawerWidget extends StatelessWidget {
ListTile(
title: Text('Settings'),
onTap: () {
Get.getDelegate()?.toNamed(Routes.SETTINGS);
Get.rootDelegate.toNamed(Routes.SETTINGS);
//to close the drawer
Navigator.of(context).pop();
... ... @@ -46,7 +46,7 @@ class DrawerWidget extends StatelessWidget {
),
onTap: () {
AuthService.to.logout();
Get.getDelegate()!.toNamed(Routes.LOGIN);
Get.rootDelegate.toNamed(Routes.LOGIN);
//to close the drawer
Navigator.of(context).pop();
... ... @@ -61,7 +61,7 @@ class DrawerWidget extends StatelessWidget {
),
),
onTap: () {
Get.getDelegate()!.toNamed(Routes.LOGIN);
Get.rootDelegate.toNamed(Routes.LOGIN);
//to close the drawer
Navigator.of(context).pop();
... ...
... ... @@ -948,23 +948,6 @@ you can only use widgets and widget functions here''';
predicate ?? (route) => false);
}
void registerRoutes(List<GetPage> getPages) {
//TODO: only replace if null???
routeTree = ParseRouteTree(routes: <GetPage>[]);
routeTree.addRoutes(getPages);
}
void addPages(List<GetPage>? getPages) {
if (getPages != null) {
registerRoutes(getPages);
}
}
void addPage(GetPage getPage) {
// routeTree = ParseRouteTree();
routeTree.addRoute(getPage);
}
/// change default config of Get
void config(
{bool? enableLog,
... ... @@ -1061,19 +1044,6 @@ you can only use widgets and widget functions here''';
return _key;
}
/// Casts the stored router delegate to a desired type
TDelegate? delegate<TDelegate extends RouterDelegate<TPage>, TPage>() =>
_routerDelegate as TDelegate?;
static RouterDelegate? _routerDelegate;
// ignore: use_setters_to_change_properties
void setDefaultDelegate(RouterDelegate? delegate) {
_routerDelegate = delegate;
}
GetDelegate? getDelegate() => delegate<GetDelegate, GetNavConfig>();
/// give current arguments
dynamic get arguments => routing.args;
... ... @@ -1213,9 +1183,6 @@ you can only use widgets and widget functions here''';
set parameters(Map<String, String?> newParameters) =>
getxController.parameters = newParameters;
ParseRouteTree get routeTree => getxController.routeTree;
set routeTree(ParseRouteTree tree) => getxController.routeTree = tree;
CustomTransition? get customTransition => getxController.customTransition;
set customTransition(CustomTransition? newTransition) =>
getxController.customTransition = newTransition;
... ... @@ -1226,6 +1193,59 @@ you can only use widgets and widget functions here''';
static GetMaterialController getxController = GetMaterialController();
}
extension NavTwoExt on GetInterface {
void addPages(List<GetPage> getPages) {
routeTree.addRoutes(getPages);
}
static late final _routeTree = ParseRouteTree(routes: []);
ParseRouteTree get routeTree => _routeTree;
void addPage(GetPage getPage) {
routeTree.addRoute(getPage);
}
/// Casts the stored router delegate to a desired type
TDelegate? delegate<TDelegate extends RouterDelegate<TPage>, TPage>() =>
_routerDelegate as TDelegate?;
static GetDelegate? _routerDelegate;
// // ignore: use_setters_to_change_properties
// void setDefaultDelegate(RouterDelegate? delegate) {
// _routerDelegate = delegate;
// }
// GetDelegate? getDelegate() => delegate<GetDelegate, GetNavConfig>();
static GetInformationParser? _informationParser;
GetInformationParser createInformationParser({String initialRoute = '/'}) {
return _informationParser ??=
GetInformationParser(initialRoute: initialRoute);
}
// static GetDelegate? _delegate;
GetDelegate get rootDelegate => createDelegate();
GetDelegate createDelegate(
{GetPage<dynamic>? notFoundRoute,
List<NavigatorObserver>? navigatorObservers,
TransitionDelegate<dynamic>? transitionDelegate,
PopMode backButtonPopMode = PopMode.History,
PreventDuplicateHandlingMode preventDuplicateHandlingMode =
PreventDuplicateHandlingMode.ReorderRoutes}) {
return _routerDelegate ??= GetDelegate(
notFoundRoute: notFoundRoute,
navigatorObservers: navigatorObservers,
transitionDelegate: transitionDelegate,
backButtonPopMode: backButtonPopMode,
preventDuplicateHandlingMode: preventDuplicateHandlingMode,
);
}
}
/// It replaces the Flutter Navigator, but needs no context.
/// You can to use navigator.push(YourRoute()) rather
/// Navigator.push(context, YourRoute());
... ...
... ... @@ -46,7 +46,7 @@ enum PreventDuplicateHandlingMode {
ReorderRoutes
}
class GetDelegate extends RouterDelegate<GetNavConfig>
class GetDelegate<T> extends RouterDelegate<GetNavConfig>
with ListenableMixin, ListNotifierMixin {
final List<GetNavConfig> history = <GetNavConfig>[];
final PopMode backButtonPopMode;
... ...
... ... @@ -116,7 +116,7 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, GetNavConfig> {
return (emptyWidget?.call(rDelegate) ?? SizedBox.shrink());
},
pickPages: pickPages,
delegate: Get.getDelegate(),
delegate: Get.rootDelegate,
);
}
... ...
... ... @@ -118,12 +118,12 @@ class GetCupertinoApp extends StatelessWidget {
final BackButtonDispatcher? backButtonDispatcher;
final CupertinoThemeData? theme;
const GetCupertinoApp.router({
GetCupertinoApp.router({
Key? key,
this.theme,
this.routeInformationProvider,
required RouteInformationParser<Object> this.routeInformationParser,
required RouterDelegate<Object> this.routerDelegate,
RouteInformationParser<Object>? routeInformationParser,
RouterDelegate<Object>? routerDelegate,
this.backButtonDispatcher,
this.builder,
this.title = '',
... ... @@ -163,7 +163,12 @@ class GetCupertinoApp extends StatelessWidget {
this.defaultGlobalState,
this.getPages,
this.unknownRoute,
}) : navigatorObservers = null,
}) : routerDelegate = routerDelegate ?? Get.createDelegate(),
routeInformationParser = routeInformationParser ??
Get.createInformationParser(
initialRoute: getPages?.first.name ?? '/',
),
navigatorObservers = null,
navigatorKey = null,
onGenerateRoute = null,
home = null,
... ... @@ -209,7 +214,10 @@ class GetCupertinoApp extends StatelessWidget {
Get.customTransition = customTransition;
initialBinding?.dependencies();
Get.addPages(getPages);
if (getPages != null) {
Get.addPages(getPages!);
}
Get.smartManagement = smartManagement;
onInit?.call();
... ...
... ... @@ -125,11 +125,11 @@ class GetMaterialApp extends StatelessWidget {
final RouterDelegate<Object>? routerDelegate;
final BackButtonDispatcher? backButtonDispatcher;
const GetMaterialApp.router({
GetMaterialApp.router({
Key? key,
this.routeInformationProvider,
required RouteInformationParser<Object> this.routeInformationParser,
required RouterDelegate<Object> this.routerDelegate,
RouteInformationParser<Object>? routeInformationParser,
RouterDelegate<Object>? routerDelegate,
this.backButtonDispatcher,
this.builder,
this.title = '',
... ... @@ -173,7 +173,12 @@ class GetMaterialApp extends StatelessWidget {
this.defaultGlobalState,
this.getPages,
this.unknownRoute,
}) : navigatorObservers = null,
}) : routerDelegate = routerDelegate ?? Get.createDelegate(),
routeInformationParser = routeInformationParser ??
Get.createInformationParser(
initialRoute: getPages?.first.name ?? '/',
),
navigatorObservers = null,
navigatorKey = null,
onGenerateRoute = null,
home = null,
... ... @@ -219,8 +224,11 @@ class GetMaterialApp extends StatelessWidget {
Get.customTransition = customTransition;
initialBinding?.dependencies();
Get.addPages(getPages);
Get.setDefaultDelegate(routerDelegate);
if (getPages != null) {
Get.addPages(getPages!);
}
//Get.setDefaultDelegate(routerDelegate);
Get.smartManagement = smartManagement;
onInit?.call();
... ...
... ... @@ -4,7 +4,6 @@ import '../../../get_utils/get_utils.dart';
import '../routes/custom_transition.dart';
import '../routes/observers/route_observer.dart';
import '../routes/transitions_type.dart';
import 'parse_route.dart';
class GetMaterialController extends GetxController {
bool testMode = false;
... ... @@ -28,8 +27,6 @@ class GetMaterialController extends GetxController {
Map<String, String?> parameters = {};
late ParseRouteTree routeTree;
CustomTransition? customTransition;
GlobalKey<NavigatorState> key = GlobalKey<NavigatorState>();
... ...