Jonny Borges

add nav2 class

  1 +import 'package:flutter/foundation.dart';
1 import 'package:flutter/material.dart'; 2 import 'package:flutter/material.dart';
2 import 'package:get/get.dart'; 3 import 'package:get/get.dart';
  4 +
3 import 'lang/translation_service.dart'; 5 import 'lang/translation_service.dart';
4 import 'routes/app_pages.dart'; 6 import 'routes/app_pages.dart';
5 import 'shared/logger/logger_utils.dart'; 7 import 'shared/logger/logger_utils.dart';
@@ -25,3 +27,108 @@ class MyApp extends StatelessWidget { @@ -25,3 +27,108 @@ class MyApp extends StatelessWidget {
25 ); 27 );
26 } 28 }
27 } 29 }
  30 +
  31 +// Navigator 2 example, WIP
  32 +// TODO: add all methods from NavigatorExtension to GetNav
  33 +
  34 +// class MyApp extends StatelessWidget {
  35 +// MyApp({Key? key}) : super(key: key);
  36 +
  37 +// final getNav = Get.put(
  38 +// GetNav(pages: [
  39 +// GetPage(name: '/first', page: () => First()),
  40 +// GetPage(name: '/second', page: () => Second()),
  41 +// GetPage(name: '/third', page: () => Third()),
  42 +// ]),
  43 +// );
  44 +
  45 +// @override
  46 +// Widget build(BuildContext context) {
  47 +// return GetMaterialApp.router(
  48 +// debugShowCheckedModeBanner: false,
  49 +// routeInformationParser: getNav.routeInformationParser,
  50 +// routerDelegate: getNav.routerDelegate,
  51 +// );
  52 +// }
  53 +// }
  54 +
  55 +// class First extends StatelessWidget {
  56 +// final GetNav getNav = Get.find();
  57 +
  58 +// @override
  59 +// Widget build(BuildContext context) {
  60 +// return Scaffold(
  61 +// appBar: AppBar(
  62 +// title: Text('page one'),
  63 +// leading: IconButton(
  64 +// icon: Icon(Icons.more),
  65 +// onPressed: () {
  66 +// Get.changeTheme(
  67 +// context.isDarkMode ? ThemeData.light() : ThemeData.dark());
  68 +// },
  69 +// ),
  70 +// ),
  71 +// body: Center(
  72 +// child: Container(
  73 +// height: 300,
  74 +// width: 300,
  75 +// child: ElevatedButton(
  76 +// onPressed: () {
  77 +// getNav.toNamed('/second?id=584305');
  78 +// },
  79 +// child: Text('next screen'),
  80 +// ),
  81 +// ),
  82 +// ),
  83 +// );
  84 +// }
  85 +// }
  86 +
  87 +// class Second extends StatelessWidget {
  88 +// final GetNav getNav = Get.find();
  89 +// @override
  90 +// Widget build(BuildContext context) {
  91 +// return Scaffold(
  92 +// appBar: AppBar(
  93 +// title: Text('page two ${Get.parameters["id"]}'),
  94 +// ),
  95 +// body: Center(
  96 +// child: Container(
  97 +// height: 300,
  98 +// width: 300,
  99 +// child: ElevatedButton(
  100 +// onPressed: () {
  101 +// getNav.toNamed('/third');
  102 +// },
  103 +// child: Text('next screen'),
  104 +// ),
  105 +// ),
  106 +// ),
  107 +// );
  108 +// }
  109 +// }
  110 +
  111 +// class Third extends StatelessWidget {
  112 +// final GetNav getNav = Get.find();
  113 +// @override
  114 +// Widget build(BuildContext context) {
  115 +// return Scaffold(
  116 +// backgroundColor: Colors.red,
  117 +// appBar: AppBar(
  118 +// title: Text('page three'),
  119 +// ),
  120 +// body: Center(
  121 +// child: Container(
  122 +// height: 300,
  123 +// width: 300,
  124 +// child: ElevatedButton(
  125 +// onPressed: () {
  126 +// getNav.offUntil('/first');
  127 +// },
  128 +// child: Text('go to first screen'),
  129 +// ),
  130 +// ),
  131 +// ),
  132 +// );
  133 +// }
  134 +// }
@@ -30,10 +30,6 @@ dependencies: @@ -30,10 +30,6 @@ dependencies:
30 path: ../ 30 path: ../
31 #get_test: ^3.13.3 31 #get_test: ^3.13.3
32 32
33 -dependency_overrides:  
34 - get:  
35 - path: ../  
36 -  
37 dev_dependencies: 33 dev_dependencies:
38 flutter_test: 34 flutter_test:
39 sdk: flutter 35 sdk: flutter
@@ -936,16 +936,18 @@ you can only use widgets and widget functions here'''; @@ -936,16 +936,18 @@ you can only use widgets and widget functions here''';
936 predicate ?? (route) => false); 936 predicate ?? (route) => false);
937 } 937 }
938 938
  939 + void registerList(List<GetPage> getPages) {
  940 + routeTree = ParseRouteTree(routes: getPages);
  941 + }
  942 +
939 void addPages(List<GetPage>? getPages) { 943 void addPages(List<GetPage>? getPages) {
940 if (getPages != null) { 944 if (getPages != null) {
941 - routeTree = ParseRouteTree();  
942 -  
943 - routeTree.addRoutes(getPages); 945 + registerList(getPages);
944 } 946 }
945 } 947 }
946 948
947 void addPage(GetPage getPage) { 949 void addPage(GetPage getPage) {
948 - routeTree = ParseRouteTree(); 950 + // routeTree = ParseRouteTree();
949 routeTree.addRoute(getPage); 951 routeTree.addRoute(getPage);
950 } 952 }
951 953
1 import 'package:flutter/cupertino.dart'; 1 import 'package:flutter/cupertino.dart';
2 import 'package:flutter/foundation.dart'; 2 import 'package:flutter/foundation.dart';
3 import 'package:flutter/material.dart'; 3 import 'package:flutter/material.dart';
  4 +
4 import '../../../get_core/get_core.dart'; 5 import '../../../get_core/get_core.dart';
5 import '../../../get_instance/get_instance.dart'; 6 import '../../../get_instance/get_instance.dart';
6 import '../../../get_state_manager/get_state_manager.dart'; 7 import '../../../get_state_manager/get_state_manager.dart';
  8 +import '../../../get_state_manager/src/simple/list_notifier.dart';
7 import '../../../get_utils/get_utils.dart'; 9 import '../../../get_utils/get_utils.dart';
8 import '../../get_navigation.dart'; 10 import '../../get_navigation.dart';
9 import 'root_controller.dart'; 11 import 'root_controller.dart';
@@ -313,63 +315,204 @@ class GetMaterialApp extends StatelessWidget { @@ -313,63 +315,204 @@ class GetMaterialApp extends StatelessWidget {
313 )); 315 ));
314 } 316 }
315 317
316 -class GetNavigator extends StatelessWidget {  
317 - final List<GetPage> getPages;  
318 -  
319 - const GetNavigator(  
320 - {Key? key,  
321 - required this.getPages,  
322 - this.pages = const <Page<dynamic>>[],  
323 - this.onPopPage,  
324 - this.initialRoute,  
325 - this.onGenerateInitialRoutes = Navigator.defaultGenerateInitialRoutes,  
326 - this.onGenerateRoute,  
327 - this.onUnknownRoute,  
328 - this.transitionDelegate = const DefaultTransitionDelegate<dynamic>(),  
329 - this.reportsRouteUpdateToEngine = false,  
330 - this.observers = const <NavigatorObserver>[],  
331 - this.restorationScopeId,  
332 - this.unKnownRoute})  
333 - : super(key: key); 318 +class GetInformationParser extends RouteInformationParser<GetPage> {
  319 + @override
  320 + SynchronousFuture<GetPage> parseRouteInformation(
  321 + RouteInformation routeInformation) {
  322 + if (routeInformation.location == '/') {
  323 + return SynchronousFuture(Get.routeTree.routes.first);
  324 + }
  325 + print('route location: ${routeInformation.location}');
  326 + final page = Get.routeTree.matchRoute(routeInformation.location!);
  327 + print(page.parameters);
  328 + final val = page.route!.copy(
  329 + name: routeInformation.location,
  330 + parameter: Map.from(page.parameters),
  331 + );
  332 + return SynchronousFuture(val);
  333 + }
334 334
335 - final List<Page<dynamic>> pages; 335 + @override
  336 + RouteInformation restoreRouteInformation(GetPage uri) {
  337 + print('restore $uri');
336 338
337 - final GetPage? unKnownRoute; 339 + return RouteInformation(location: uri.name);
  340 + }
  341 +}
338 342
339 - final PopPageCallback? onPopPage; 343 +class GetNav {
  344 + GetNav({GetDelegate? routerDelegate, required this.pages})
  345 + : routerDelegate = routerDelegate ?? GetDelegate() {
  346 + Get.registerList(pages);
  347 + Get.addKey(this.routerDelegate.navigatorKey);
  348 + }
340 349
341 - final TransitionDelegate<dynamic> transitionDelegate; 350 + Future<T?> toNamed<T>(String route) {
  351 + return routerDelegate.toNamed(route);
  352 + }
342 353
343 - final String? initialRoute; 354 + Future<T?> pushRoute<T>(
  355 + GetPage route, {
  356 + bool removeUntil = false,
  357 + bool replaceCurrent = false,
  358 + bool rebuildStack = true,
  359 + }) {
  360 + return routerDelegate.pushRoute(route,
  361 + removeUntil: removeUntil,
  362 + replaceCurrent: replaceCurrent,
  363 + rebuildStack: rebuildStack);
  364 + }
344 365
345 - final RouteFactory? onGenerateRoute; 366 + Future<bool> popRoute() {
  367 + return routerDelegate.popRoute();
  368 + }
346 369
347 - final RouteFactory? onUnknownRoute; 370 + Future<T?> offUntil<T>(String route) {
  371 + return routerDelegate.offUntil(route);
  372 + }
348 373
349 - final List<NavigatorObserver> observers; 374 + final GetDelegate routerDelegate;
  375 + final GetInformationParser routeInformationParser = GetInformationParser();
  376 + final List<GetPage> pages;
  377 +}
350 378
351 - final String? restorationScopeId; 379 +class GetDelegate extends RouterDelegate<GetPage>
  380 + with
  381 + // ignore: prefer_mixin
  382 + ListNotifier,
  383 + PopNavigatorRouterDelegateMixin<GetPage> {
  384 + final List<GetPage> routes = <GetPage>[];
352 385
353 - static const String defaultRouteName = '/'; 386 + final GetPage? notFoundRoute;
354 387
355 - final RouteListFactory onGenerateInitialRoutes; 388 + final List<NavigatorObserver>? dipNavObservers;
  389 + final TransitionDelegate<dynamic>? transitionDelegate;
356 390
357 - final bool reportsRouteUpdateToEngine; 391 + GetDelegate(
  392 + {this.notFoundRoute, this.dipNavObservers, this.transitionDelegate});
358 393
  394 + /// Called by the [Router] at startup with the structure that the
  395 + /// [RouteInformationParser] obtained from parsing the initial route.
359 @override 396 @override
360 - Widget build(Object context) { 397 + Widget build(BuildContext context) {
361 return Navigator( 398 return Navigator(
362 - pages: getPages,  
363 - onPopPage: onPopPage,  
364 - initialRoute: initialRoute,  
365 - onGenerateInitialRoutes: onGenerateInitialRoutes,  
366 - onGenerateRoute: onGenerateRoute,  
367 - onUnknownRoute: onUnknownRoute,  
368 - transitionDelegate: transitionDelegate,  
369 - reportsRouteUpdateToEngine: reportsRouteUpdateToEngine,  
370 - observers: observers,  
371 - restorationScopeId: restorationScopeId,  
372 - key: Get.nestedKey(key), 399 + key: navigatorKey,
  400 + onPopPage: _onPopPage,
  401 + pages: routes.toList(),
  402 + observers: [GetObserver()],
  403 + transitionDelegate:
  404 + transitionDelegate ?? const DefaultTransitionDelegate<dynamic>(),
  405 + );
  406 + }
  407 +
  408 + @override
  409 + final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
  410 +
  411 + @override
  412 + Future<void> setInitialRoutePath(GetPage configuration) async {
  413 + return pushRoute(configuration);
  414 + }
  415 +
  416 + @override
  417 + Future<void> setNewRoutePath(GetPage configuration) {
  418 + routes.clear();
  419 + return pushRoute(configuration);
  420 + }
  421 +
  422 + /// Called by the [Router] when it detects a route information may have
  423 + /// changed as a result of rebuild.
  424 + @override
  425 + GetPage get currentConfiguration {
  426 + final route = routes.last;
  427 + return route;
  428 + }
  429 +
  430 + Future<T?> toNamed<T>(String route) {
  431 + final page = Get.routeTree.matchRoute(route);
  432 + if (page.route != null) {
  433 + return pushRoute(page.route!.copy(name: route));
  434 + } else {
  435 + return pushRoute(_notFound());
  436 + }
  437 + }
  438 +
  439 + Future<T?> offUntil<T>(String route) {
  440 + final page = Get.routeTree.matchRoute(route);
  441 + if (page.route != null) {
  442 + return pushRoute(page.route!.copy(name: route), removeUntil: true);
  443 + } else {
  444 + return pushRoute(_notFound());
  445 + }
  446 + }
  447 +
  448 + GetPage _notFound() {
  449 + return notFoundRoute ??
  450 + GetPage(
  451 + name: '/404',
  452 + page: () => Scaffold(
  453 + body: Text('not found'),
  454 + ),
  455 + );
  456 + }
  457 +
  458 + Future<T?> pushRoute<T>(
  459 + GetPage route, {
  460 + bool removeUntil = false,
  461 + bool replaceCurrent = false,
  462 + bool rebuildStack = true,
  463 + }) async {
  464 + route = route.copy(unknownRoute: _notFound());
  465 + assert(!(removeUntil && replaceCurrent),
  466 + 'Only removeUntil or replaceCurrent should by true!');
  467 + if (removeUntil) {
  468 + routes.clear();
  469 + } else if (replaceCurrent && routes.isNotEmpty) {
  470 + routes.removeLast();
  471 + }
  472 + _addRoute(route);
  473 + if (rebuildStack) {
  474 + refresh();
  475 + }
  476 + }
  477 +
  478 + @override
  479 + Future<bool> popRoute() {
  480 + if (routes.length > 1) {
  481 + _removePage(routes.last);
  482 + return Future.value(true);
  483 + }
  484 + return Future.value(false);
  485 + }
  486 +
  487 + bool canPop() {
  488 + return routes.isNotEmpty;
  489 + }
  490 +
  491 + bool _onPopPage(Route<dynamic> route, dynamic result) {
  492 + final didPop = route.didPop(result);
  493 + if (!didPop) {
  494 + return false;
  495 + }
  496 + routes.remove(route.settings);
  497 + refresh();
  498 + return true;
  499 + }
  500 +
  501 + void _removePage(GetPage page) {
  502 + routes.remove(page);
  503 +
  504 + refresh();
  505 + }
  506 +
  507 + void _addRoute(GetPage route) {
  508 + routes.add(
  509 + route,
373 ); 510 );
  511 + refresh();
  512 + }
  513 +
  514 + void addRoutes(List<GetPage> pages) {
  515 + routes.addAll(pages);
  516 + refresh();
374 } 517 }
375 } 518 }
@@ -9,7 +9,11 @@ class RouteDecoder { @@ -9,7 +9,11 @@ class RouteDecoder {
9 } 9 }
10 10
11 class ParseRouteTree { 11 class ParseRouteTree {
12 - final _routes = <GetPage>[]; 12 + ParseRouteTree({
  13 + required this.routes,
  14 + });
  15 +
  16 + final List<GetPage> routes;
13 17
14 RouteDecoder matchRoute(String name) { 18 RouteDecoder matchRoute(String name) {
15 final uri = Uri.parse(name); 19 final uri = Uri.parse(name);
@@ -34,7 +38,7 @@ class ParseRouteTree { @@ -34,7 +38,7 @@ class ParseRouteTree {
34 } 38 }
35 39
36 void addRoute(GetPage route) { 40 void addRoute(GetPage route) {
37 - _routes.add(route); 41 + routes.add(route);
38 42
39 // Add Page children. 43 // Add Page children.
40 for (var page in _flattenPage(route)) { 44 for (var page in _flattenPage(route)) {
@@ -82,13 +86,13 @@ class ParseRouteTree { @@ -82,13 +86,13 @@ class ParseRouteTree {
82 opaque: origin.opaque, 86 opaque: origin.opaque,
83 parameter: origin.parameter, 87 parameter: origin.parameter,
84 popGesture: origin.popGesture, 88 popGesture: origin.popGesture,
85 - settings: origin.settings, 89 + // settings: origin.settings,
86 transitionDuration: origin.transitionDuration, 90 transitionDuration: origin.transitionDuration,
87 middlewares: middlewares, 91 middlewares: middlewares,
88 ); 92 );
89 93
90 GetPage? _findRoute(String name) { 94 GetPage? _findRoute(String name) {
91 - return _routes.firstWhereOrNull( 95 + return routes.firstWhereOrNull(
92 (route) => route.path.regex.hasMatch(name), 96 (route) => route.path.regex.hasMatch(name),
93 ); 97 );
94 } 98 }
  1 +import 'package:flutter/foundation.dart';
  2 +import 'package:flutter/material.dart';
1 import 'package:flutter/widgets.dart'; 3 import 'package:flutter/widgets.dart';
2 4
3 import '../../../get_core/src/get_main.dart'; 5 import '../../../get_core/src/get_main.dart';
@@ -6,15 +8,25 @@ import '../../get_navigation.dart'; @@ -6,15 +8,25 @@ import '../../get_navigation.dart';
6 import 'custom_transition.dart'; 8 import 'custom_transition.dart';
7 import 'transitions_type.dart'; 9 import 'transitions_type.dart';
8 10
  11 +@immutable
9 class PathDecoded { 12 class PathDecoded {
10 const PathDecoded(this.regex, this.keys); 13 const PathDecoded(this.regex, this.keys);
11 final RegExp regex; 14 final RegExp regex;
12 final List<String?> keys; 15 final List<String?> keys;
  16 +
  17 + @override
  18 + bool operator ==(Object other) {
  19 + if (identical(this, other)) return true;
  20 +
  21 + return other is PathDecoded &&
  22 + other.regex == regex; // && listEquals(other.keys, keys);
  23 + }
  24 +
  25 + @override
  26 + int get hashCode => regex.hashCode;
13 } 27 }
14 28
15 class GetPage<T> extends Page<T> { 29 class GetPage<T> extends Page<T> {
16 - @override  
17 - final String name;  
18 final GetPageBuilder page; 30 final GetPageBuilder page;
19 final bool? popGesture; 31 final bool? popGesture;
20 final Map<String, String>? parameter; 32 final Map<String, String>? parameter;
@@ -29,7 +41,19 @@ class GetPage<T> extends Page<T> { @@ -29,7 +41,19 @@ class GetPage<T> extends Page<T> {
29 final CustomTransition? customTransition; 41 final CustomTransition? customTransition;
30 final Duration? transitionDuration; 42 final Duration? transitionDuration;
31 final bool fullscreenDialog; 43 final bool fullscreenDialog;
32 - final RouteSettings? settings; 44 +
  45 + // @override
  46 + // final LocalKey? key;
  47 +
  48 + // @override
  49 + // RouteSettings get settings => this;
  50 +
  51 + @override
  52 + Object? get arguments => Get.arguments;
  53 +
  54 + @override
  55 + final String name;
  56 +
33 final List<GetPage>? children; 57 final List<GetPage>? children;
34 final List<GetMiddleware>? middlewares; 58 final List<GetMiddleware>? middlewares;
35 final PathDecoded path; 59 final PathDecoded path;
@@ -39,7 +63,7 @@ class GetPage<T> extends Page<T> { @@ -39,7 +63,7 @@ class GetPage<T> extends Page<T> {
39 required this.name, 63 required this.name,
40 required this.page, 64 required this.page,
41 this.title, 65 this.title,
42 - this.settings, 66 + // RouteSettings settings,
43 this.maintainState = true, 67 this.maintainState = true,
44 this.curve = Curves.linear, 68 this.curve = Curves.linear,
45 this.alignment, 69 this.alignment,
@@ -55,7 +79,13 @@ class GetPage<T> extends Page<T> { @@ -55,7 +79,13 @@ class GetPage<T> extends Page<T> {
55 this.children, 79 this.children,
56 this.middlewares, 80 this.middlewares,
57 this.unknownRoute, 81 this.unknownRoute,
58 - }) : path = _nameToRegex(name); 82 + }) : path = _nameToRegex(name),
  83 + super(
  84 + key: ValueKey(name),
  85 + name: name,
  86 + arguments: Get.arguments,
  87 + );
  88 + // settings = RouteSettings(name: name, arguments: Get.arguments);
59 89
60 static PathDecoded _nameToRegex(String path) { 90 static PathDecoded _nameToRegex(String path) {
61 var keys = <String?>[]; 91 var keys = <String?>[];
@@ -96,6 +126,7 @@ class GetPage<T> extends Page<T> { @@ -96,6 +126,7 @@ class GetPage<T> extends Page<T> {
96 bool? fullscreenDialog, 126 bool? fullscreenDialog,
97 RouteSettings? settings, 127 RouteSettings? settings,
98 List<GetPage>? children, 128 List<GetPage>? children,
  129 + GetPage? unknownRoute,
99 List<GetMiddleware>? middlewares, 130 List<GetMiddleware>? middlewares,
100 }) { 131 }) {
101 return GetPage( 132 return GetPage(
@@ -114,19 +145,70 @@ class GetPage<T> extends Page<T> { @@ -114,19 +145,70 @@ class GetPage<T> extends Page<T> {
114 customTransition: customTransition ?? this.customTransition, 145 customTransition: customTransition ?? this.customTransition,
115 transitionDuration: transitionDuration ?? this.transitionDuration, 146 transitionDuration: transitionDuration ?? this.transitionDuration,
116 fullscreenDialog: fullscreenDialog ?? this.fullscreenDialog, 147 fullscreenDialog: fullscreenDialog ?? this.fullscreenDialog,
117 - settings: settings ?? this.settings, 148 + // settings: settings ?? this.settings,
118 children: children ?? this.children, 149 children: children ?? this.children,
  150 + unknownRoute: unknownRoute ?? this.unknownRoute,
119 middlewares: middlewares ?? this.middlewares, 151 middlewares: middlewares ?? this.middlewares,
120 ); 152 );
121 } 153 }
122 154
123 @override 155 @override
124 - Object? get arguments => Get.arguments;  
125 -  
126 - @override  
127 Route<T> createRoute(BuildContext context) { 156 Route<T> createRoute(BuildContext context) {
128 return PageRedirect( 157 return PageRedirect(
129 - RouteSettings(name: name, arguments: Get.arguments), unknownRoute)  
130 - .page<T>(); 158 + this,
  159 + unknownRoute,
  160 + ).page<T>();
  161 + }
  162 +
  163 + @override
  164 + bool operator ==(Object other) {
  165 + if (identical(this, other)) return true;
  166 + if (other is GetPage<T>) {
  167 + print(other.path.hashCode == path.hashCode);
  168 + }
  169 +
  170 + return other is GetPage<T> &&
  171 + other.page.runtimeType == page.runtimeType &&
  172 + other.popGesture == popGesture &&
  173 + // mapEquals(other.parameter, parameter) &&
  174 + other.title == title &&
  175 + other.transition == transition &&
  176 + other.curve == curve &&
  177 + other.alignment == alignment &&
  178 + other.maintainState == maintainState &&
  179 + other.opaque == opaque &&
  180 + other.binding == binding &&
  181 + // listEquals(other.bindings, bindings) &&
  182 + other.customTransition == customTransition &&
  183 + other.transitionDuration == transitionDuration &&
  184 + other.fullscreenDialog == fullscreenDialog &&
  185 + other.name == name &&
  186 + // listEquals(other.children, children) &&
  187 + // listEquals(other.middlewares, middlewares) &&
  188 + other.path == path &&
  189 + other.unknownRoute == unknownRoute;
  190 + }
  191 +
  192 + @override
  193 + int get hashCode {
  194 + return //page.hashCode ^
  195 + popGesture.hashCode ^
  196 + // parameter.hashCode ^
  197 + title.hashCode ^
  198 + transition.hashCode ^
  199 + curve.hashCode ^
  200 + alignment.hashCode ^
  201 + maintainState.hashCode ^
  202 + opaque.hashCode ^
  203 + binding.hashCode ^
  204 + // bindings.hashCode ^
  205 + customTransition.hashCode ^
  206 + transitionDuration.hashCode ^
  207 + fullscreenDialog.hashCode ^
  208 + name.hashCode ^
  209 + // children.hashCode ^
  210 + // middlewares.hashCode ^
  211 + path.hashCode ^
  212 + unknownRoute.hashCode;
131 } 213 }
132 } 214 }
@@ -189,8 +189,7 @@ class PageRedirect { @@ -189,8 +189,7 @@ class PageRedirect {
189 page: route!.page, 189 page: route!.page,
190 routeName: route!.name, 190 routeName: route!.name,
191 parameter: route!.parameter, 191 parameter: route!.parameter,
192 - settings: RouteSettings(  
193 - name: settings.name, arguments: settings.arguments), 192 + settings: settings,
194 curve: route!.curve, 193 curve: route!.curve,
195 opaque: route!.opaque, 194 opaque: route!.opaque,
196 customTransition: route!.customTransition, 195 customTransition: route!.customTransition,
@@ -5,7 +5,6 @@ import 'package:get/get_navigation/src/root/parse_route.dart'; @@ -5,7 +5,6 @@ import 'package:get/get_navigation/src/root/parse_route.dart';
5 5
6 void main() { 6 void main() {
7 test('Parse Page with children', () { 7 test('Parse Page with children', () {
8 - final tree = ParseRouteTree();  
9 final pageTree = GetPage(name: '/city', page: () => Container(), children: [ 8 final pageTree = GetPage(name: '/city', page: () => Container(), children: [
10 GetPage(name: '/home', page: () => Container(), children: [ 9 GetPage(name: '/home', page: () => Container(), children: [
11 GetPage(name: '/bed-room', page: () => Container()), 10 GetPage(name: '/bed-room', page: () => Container()),
@@ -20,7 +19,9 @@ void main() { @@ -20,7 +19,9 @@ void main() {
20 ]), 19 ]),
21 ]); 20 ]);
22 21
23 - tree.addRoute(pageTree); 22 + final tree = ParseRouteTree(routes: <GetPage>[pageTree]);
  23 +
  24 + // tree.addRoute(pageTree);
24 final searchRoute = '/city/work/office/pen'; 25 final searchRoute = '/city/work/office/pen';
25 final match = tree.matchRoute(searchRoute); 26 final match = tree.matchRoute(searchRoute);
26 expect(match, isNotNull); 27 expect(match, isNotNull);
@@ -28,7 +29,6 @@ void main() { @@ -28,7 +29,6 @@ void main() {
28 }); 29 });
29 30
30 test('Parse Page without children', () { 31 test('Parse Page without children', () {
31 - final tree = ParseRouteTree();  
32 final pageTree = [ 32 final pageTree = [
33 GetPage(name: '/city', page: () => Container()), 33 GetPage(name: '/city', page: () => Container()),
34 GetPage(name: '/city/home', page: () => Container()), 34 GetPage(name: '/city/home', page: () => Container()),
@@ -41,9 +41,11 @@ void main() { @@ -41,9 +41,11 @@ void main() {
41 GetPage(name: '/city/work/meeting-room', page: () => Container()), 41 GetPage(name: '/city/work/meeting-room', page: () => Container()),
42 ]; 42 ];
43 43
44 - for (var p in pageTree) {  
45 - tree.addRoute(p);  
46 - } 44 + final tree = ParseRouteTree(routes: pageTree);
  45 +
  46 + // for (var p in pageTree) {
  47 + // tree.addRoute(p);
  48 + // }
47 49
48 final searchRoute = '/city/work/office/pen'; 50 final searchRoute = '/city/work/office/pen';
49 final match = tree.matchRoute(searchRoute); 51 final match = tree.matchRoute(searchRoute);