Showing
6 changed files
with
35 additions
and
31 deletions
| @@ -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, | 
- 
Please register or login to post a comment