Ahmed Fwela

fixed handling of route creation

@@ -23,6 +23,8 @@ class HomeView extends GetView<HomeController> { @@ -23,6 +23,8 @@ class HomeView extends GetView<HomeController> {
23 body: GetRouterOutlet( 23 body: GetRouterOutlet(
24 emptyPage: (delegate) => DashboardView(), 24 emptyPage: (delegate) => DashboardView(),
25 pickPages: (currentNavStack) { 25 pickPages: (currentNavStack) {
  26 + print('Home RouterOutlet: $currentNavStack');
  27 +
26 // will take any route after home 28 // will take any route after home
27 final res = 29 final res =
28 currentNavStack.currentTreeBranch.pickAfterRoute(Routes.HOME); 30 currentNavStack.currentTreeBranch.pickAfterRoute(Routes.HOME);
@@ -35,8 +35,6 @@ class GetInformationParser extends RouteInformationParser<GetNavConfig> { @@ -35,8 +35,6 @@ class GetInformationParser extends RouteInformationParser<GetNavConfig> {
35 35
36 @override 36 @override
37 RouteInformation restoreRouteInformation(GetNavConfig config) { 37 RouteInformation restoreRouteInformation(GetNavConfig config) {
38 - print('restore $config');  
39 -  
40 return RouteInformation( 38 return RouteInformation(
41 location: config.location, 39 location: config.location,
42 state: config.state, 40 state: config.state,
@@ -31,8 +31,5 @@ class GetNavConfig extends RouteInformation { @@ -31,8 +31,5 @@ class GetNavConfig extends RouteInformation {
31 31
32 @override 32 @override
33 String toString() => ''' 33 String toString() => '''
34 - ======GetNavConfig=====  
35 - currentTreeBranch: $currentTreeBranch  
36 - currentPage: $currentPage  
37 - ======GetNavConfig====='''; 34 +======GetNavConfig=====\ncurrentTreeBranch: $currentTreeBranch\ncurrentPage: $currentPage\n======GetNavConfig=====''';
38 } 35 }
@@ -46,7 +46,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -46,7 +46,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
46 final List<GetNavConfig> history = <GetNavConfig>[]; 46 final List<GetNavConfig> history = <GetNavConfig>[];
47 final PopMode backButtonPopMode; 47 final PopMode backButtonPopMode;
48 final PreventDuplicateHandlingMode preventDuplicateHandlingMode; 48 final PreventDuplicateHandlingMode preventDuplicateHandlingMode;
49 - final pageRoutes = <String, GetPageRoute>{};  
50 49
51 GetPage? notFoundRoute; 50 GetPage? notFoundRoute;
52 51
@@ -82,7 +81,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -82,7 +81,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
82 81
83 void _removeHistoryEntry(GetNavConfig entry) { 82 void _removeHistoryEntry(GetNavConfig entry) {
84 history.remove(entry); 83 history.remove(entry);
85 - pageRoutes.remove(entry.location);  
86 final lastCompleter = _resultCompleter.remove(entry); 84 final lastCompleter = _resultCompleter.remove(entry);
87 lastCompleter?.complete(entry); 85 lastCompleter?.complete(entry);
88 } 86 }
@@ -92,7 +90,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -92,7 +90,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
92 if (history.any((element) => element.location == config.location)) { 90 if (history.any((element) => element.location == config.location)) {
93 switch (preventDuplicateHandlingMode) { 91 switch (preventDuplicateHandlingMode) {
94 case PreventDuplicateHandlingMode.PopUntilOriginalRoute: 92 case PreventDuplicateHandlingMode.PopUntilOriginalRoute:
95 - until(config.location!, popMode: PopMode.History); 93 + until(config.location!, popMode: PopMode.Page);
96 return; 94 return;
97 case PreventDuplicateHandlingMode.DoNothing: 95 case PreventDuplicateHandlingMode.DoNothing:
98 default: 96 default:
@@ -101,8 +99,11 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -101,8 +99,11 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
101 } 99 }
102 } 100 }
103 history.add(config); 101 history.add(config);
104 - pageRoutes[config.location!] =  
105 - PageRedirect(config.currentPage!, _notFound()).page(); 102 + }
  103 +
  104 + GetPageRoute getPageRoute(RouteSettings? settings) {
  105 + return PageRedirect(settings ?? RouteSettings(name: '/404'), _notFound())
  106 + .page();
106 } 107 }
107 108
108 GetNavConfig? _popHistory() { 109 GetNavConfig? _popHistory() {
@@ -112,7 +113,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -112,7 +113,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
112 113
113 GetNavConfig _doPopHistory() { 114 GetNavConfig _doPopHistory() {
114 final res = history.removeLast(); 115 final res = history.removeLast();
115 - pageRoutes.remove(res.location);  
116 return res; 116 return res;
117 } 117 }
118 118
@@ -190,6 +190,16 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -190,6 +190,16 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
190 return SynchronousFuture(_canPopPage()); 190 return SynchronousFuture(_canPopPage());
191 } 191 }
192 192
  193 + bool _canPop(PopMode mode) {
  194 + switch (mode) {
  195 + case PopMode.History:
  196 + return _canPopHistory();
  197 + case PopMode.Page:
  198 + default:
  199 + return _canPopPage();
  200 + }
  201 + }
  202 +
193 /// gets the visual pages from the current history entry 203 /// gets the visual pages from the current history entry
194 /// 204 ///
195 /// visual pages must have the [RouterOutletContainerMiddleWare] middleware 205 /// visual pages must have the [RouterOutletContainerMiddleWare] middleware
@@ -225,7 +235,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -225,7 +235,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
225 @override 235 @override
226 Future<void> setInitialRoutePath(GetNavConfig configuration) async { 236 Future<void> setInitialRoutePath(GetNavConfig configuration) async {
227 history.clear(); 237 history.clear();
228 - pageRoutes.clear();  
229 _resultCompleter.clear(); 238 _resultCompleter.clear();
230 await pushHistory(configuration); 239 await pushHistory(configuration);
231 } 240 }
@@ -242,11 +251,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -242,11 +251,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
242 return route; 251 return route;
243 } 252 }
244 253
245 - GetPageRoute? get currentRoute {  
246 - final curPage = currentConfiguration?.currentPage;  
247 - return curPage == null ? null : pageRoutes[curPage];  
248 - }  
249 -  
250 Future<T?> toNamed<T>(String fullRoute) { 254 Future<T?> toNamed<T>(String fullRoute) {
251 final decoder = Get.routeTree.matchRoute(fullRoute); 255 final decoder = Get.routeTree.matchRoute(fullRoute);
252 return pushHistory<T>( 256 return pushHistory<T>(
@@ -263,12 +267,12 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -263,12 +267,12 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
263 /// DOES NOT remove the [fullRoute] 267 /// DOES NOT remove the [fullRoute]
264 void until( 268 void until(
265 String fullRoute, { 269 String fullRoute, {
266 - PopMode popMode = PopMode.History, 270 + PopMode popMode = PopMode.Page,
267 }) { 271 }) {
268 // remove history or page entries until you meet route 272 // remove history or page entries until you meet route
269 - final currentEntry = currentConfiguration;  
270 - var iterator = currentEntry;  
271 - while (history.length > 0 && 273 +
  274 + var iterator = currentConfiguration;
  275 + while (_canPop(popMode) &&
272 iterator != null && 276 iterator != null &&
273 iterator.location != fullRoute) { 277 iterator.location != fullRoute) {
274 _pop(popMode); 278 _pop(popMode);
@@ -304,7 +308,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -304,7 +308,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
304 @override 308 @override
305 Future<bool> popRoute({ 309 Future<bool> popRoute({
306 Object? result, 310 Object? result,
307 - PopMode popMode = PopMode.History, 311 + PopMode popMode = PopMode.Page,
308 }) async { 312 }) async {
309 //Returning false will cause the entire app to be popped. 313 //Returning false will cause the entire app to be popped.
310 final wasPopup = await handlePopupRoutes(result: result); 314 final wasPopup = await handlePopupRoutes(result: result);
@@ -50,6 +50,7 @@ class _RouterOutletState<TDelegate extends RouterDelegate<T>, T extends Object> @@ -50,6 +50,7 @@ class _RouterOutletState<TDelegate extends RouterDelegate<T>, T extends Object>
50 @override 50 @override
51 void initState() { 51 void initState() {
52 super.initState(); 52 super.initState();
  53 + _getCurrentRoute();
53 delegate.addListener(onRouterDelegateChanged); 54 delegate.addListener(onRouterDelegateChanged);
54 } 55 }
55 56
@@ -60,11 +61,12 @@ class _RouterOutletState<TDelegate extends RouterDelegate<T>, T extends Object> @@ -60,11 +61,12 @@ class _RouterOutletState<TDelegate extends RouterDelegate<T>, T extends Object>
60 } 61 }
61 62
62 T? currentRoute; 63 T? currentRoute;
  64 + void _getCurrentRoute() {
  65 + currentRoute = delegate.currentConfiguration;
  66 + }
63 67
64 void onRouterDelegateChanged() { 68 void onRouterDelegateChanged() {
65 - setState(() {  
66 - currentRoute = delegate.currentConfiguration;  
67 - }); 69 + setState(_getCurrentRoute);
68 } 70 }
69 71
70 @override 72 @override
@@ -92,8 +94,8 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, GetNavConfig> { @@ -92,8 +94,8 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, GetNavConfig> {
92 required List<GetPage> Function(GetNavConfig currentNavStack) pickPages, 94 required List<GetPage> Function(GetNavConfig currentNavStack) pickPages,
93 }) : super( 95 }) : super(
94 pageBuilder: (context, rDelegate, page) { 96 pageBuilder: (context, rDelegate, page) {
95 - final pageRoute = rDelegate.pageRoutes[page?.name];  
96 - if (pageRoute != null) { 97 + final pageRoute = rDelegate.getPageRoute(page);
  98 + if (page != null) {
97 //TODO: transitions go here ! 99 //TODO: transitions go here !
98 return pageRoute.buildPage( 100 return pageRoute.buildPage(
99 context, 101 context,
@@ -104,8 +106,8 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, GetNavConfig> { @@ -104,8 +106,8 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, GetNavConfig> {
104 106
105 /// TODO: improve this logic abit 107 /// TODO: improve this logic abit
106 return (emptyPage?.call(rDelegate) ?? 108 return (emptyPage?.call(rDelegate) ??
107 - rDelegate.notFoundRoute?.page()) ??  
108 - SizedBox.shrink(); 109 + pageRoute.page?.call() ??
  110 + SizedBox.shrink());
109 }, 111 },
110 pickPages: pickPages, 112 pickPages: pickPages,
111 delegate: Get.getDelegate(), 113 delegate: Get.getDelegate(),
@@ -53,6 +53,7 @@ class ParseRouteTree { @@ -53,6 +53,7 @@ class ParseRouteTree {
53 .map( 53 .map(
54 (e) => e.value!.copy( 54 (e) => e.value!.copy(
55 parameter: params, 55 parameter: params,
  56 + name: e.key,
56 ), 57 ),
57 ) 58 )
58 .toList(); 59 .toList();
@@ -110,7 +111,7 @@ class ParseRouteTree { @@ -110,7 +111,7 @@ class ParseRouteTree {
110 GetPage _addChild( 111 GetPage _addChild(
111 GetPage origin, String parentPath, List<GetMiddleware> middlewares) => 112 GetPage origin, String parentPath, List<GetMiddleware> middlewares) =>
112 GetPage( 113 GetPage(
113 - name: parentPath + origin.name, 114 + name: (parentPath + origin.name).replaceAll(r'//', '/'),
114 page: origin.page, 115 page: origin.page,
115 title: origin.title, 116 title: origin.title,
116 alignment: origin.alignment, 117 alignment: origin.alignment,