Showing
1 changed file
with
42 additions
and
8 deletions
| @@ -9,6 +9,8 @@ class GetDelegate extends RouterDelegate<GetPage> | @@ -9,6 +9,8 @@ class GetDelegate extends RouterDelegate<GetPage> | ||
| 9 | with ListenableMixin, ListNotifierMixin { | 9 | with ListenableMixin, ListNotifierMixin { | 
| 10 | final List<GetPage> routes = <GetPage>[]; | 10 | final List<GetPage> routes = <GetPage>[]; | 
| 11 | 11 | ||
| 12 | + final pageRoutes = <GetPage, GetPageRoute>{}; | ||
| 13 | + | ||
| 12 | GetPage? notFoundRoute; | 14 | GetPage? notFoundRoute; | 
| 13 | 15 | ||
| 14 | final List<NavigatorObserver>? dipNavObservers; | 16 | final List<NavigatorObserver>? dipNavObservers; | 
| @@ -56,6 +58,7 @@ class GetDelegate extends RouterDelegate<GetPage> | @@ -56,6 +58,7 @@ class GetDelegate extends RouterDelegate<GetPage> | ||
| 56 | @override | 58 | @override | 
| 57 | Future<void> setNewRoutePath(GetPage configuration) { | 59 | Future<void> setNewRoutePath(GetPage configuration) { | 
| 58 | routes.clear(); | 60 | routes.clear(); | 
| 61 | + pageRoutes.clear(); | ||
| 59 | return pushRoute(configuration); | 62 | return pushRoute(configuration); | 
| 60 | } | 63 | } | 
| 61 | 64 | ||
| @@ -67,6 +70,8 @@ class GetDelegate extends RouterDelegate<GetPage> | @@ -67,6 +70,8 @@ class GetDelegate extends RouterDelegate<GetPage> | ||
| 67 | return route; | 70 | return route; | 
| 68 | } | 71 | } | 
| 69 | 72 | ||
| 73 | + GetPageRoute? get currentRoute => pageRoutes[currentConfiguration]; | ||
| 74 | + | ||
| 70 | Future<T?> toNamed<T>(String route) { | 75 | Future<T?> toNamed<T>(String route) { | 
| 71 | final page = Get.routeTree.matchRoute(route); | 76 | final page = Get.routeTree.matchRoute(route); | 
| 72 | if (page.route != null) { | 77 | if (page.route != null) { | 
| @@ -95,23 +100,25 @@ class GetDelegate extends RouterDelegate<GetPage> | @@ -95,23 +100,25 @@ class GetDelegate extends RouterDelegate<GetPage> | ||
| 95 | } | 100 | } | 
| 96 | 101 | ||
| 97 | Future<T?> pushRoute<T>( | 102 | Future<T?> pushRoute<T>( | 
| 98 | - GetPage route, { | 103 | + GetPage page, { | 
| 99 | bool removeUntil = false, | 104 | bool removeUntil = false, | 
| 100 | bool replaceCurrent = false, | 105 | bool replaceCurrent = false, | 
| 101 | bool rebuildStack = true, | 106 | bool rebuildStack = true, | 
| 102 | }) { | 107 | }) { | 
| 103 | final completer = Completer<T?>(); | 108 | final completer = Completer<T?>(); | 
| 104 | - _resultCompleter[route] = completer; | 109 | + _resultCompleter[page] = completer; | 
| 105 | 110 | ||
| 106 | - route = route.copy(unknownRoute: _notFound()); | 111 | + page = page.copy(unknownRoute: _notFound()); | 
| 107 | assert(!(removeUntil && replaceCurrent), | 112 | assert(!(removeUntil && replaceCurrent), | 
| 108 | 'Only removeUntil or replaceCurrent should by true!'); | 113 | 'Only removeUntil or replaceCurrent should by true!'); | 
| 109 | if (removeUntil) { | 114 | if (removeUntil) { | 
| 110 | routes.clear(); | 115 | routes.clear(); | 
| 116 | + pageRoutes.clear(); | ||
| 111 | } else if (replaceCurrent && routes.isNotEmpty) { | 117 | } else if (replaceCurrent && routes.isNotEmpty) { | 
| 112 | - routes.removeLast(); | 118 | + final lastPage = routes.removeLast(); | 
| 119 | + pageRoutes.remove(lastPage); | ||
| 113 | } | 120 | } | 
| 114 | - addPage(route); | 121 | + addPage(page); | 
| 115 | if (rebuildStack) { | 122 | if (rebuildStack) { | 
| 116 | refresh(); | 123 | refresh(); | 
| 117 | } | 124 | } | 
| @@ -153,7 +160,7 @@ class GetDelegate extends RouterDelegate<GetPage> | @@ -153,7 +160,7 @@ class GetDelegate extends RouterDelegate<GetPage> | ||
| 153 | } | 160 | } | 
| 154 | 161 | ||
| 155 | bool canPop() { | 162 | bool canPop() { | 
| 156 | - return routes.isNotEmpty; | 163 | + return routes.length > 1; | 
| 157 | } | 164 | } | 
| 158 | 165 | ||
| 159 | bool _onPopPage(Route<dynamic> route, dynamic result) { | 166 | bool _onPopPage(Route<dynamic> route, dynamic result) { | 
| @@ -161,14 +168,24 @@ class GetDelegate extends RouterDelegate<GetPage> | @@ -161,14 +168,24 @@ class GetDelegate extends RouterDelegate<GetPage> | ||
| 161 | if (!didPop) { | 168 | if (!didPop) { | 
| 162 | return false; | 169 | return false; | 
| 163 | } | 170 | } | 
| 164 | - routes.remove(route.settings); | 171 | + final settings = route.settings; | 
| 172 | + if (settings is GetPage) { | ||
| 173 | + removePage(settings); | ||
| 174 | + } | ||
| 165 | refresh(); | 175 | refresh(); | 
| 166 | return true; | 176 | return true; | 
| 167 | } | 177 | } | 
| 168 | 178 | ||
| 169 | void removePage(GetPage page) { | 179 | void removePage(GetPage page) { | 
| 180 | + final isLast = routes.last == page; | ||
| 181 | + //check if it's last | ||
| 170 | routes.remove(page); | 182 | routes.remove(page); | 
| 171 | - | 183 | + final oldPageRoute = pageRoutes.remove(page); | 
| 184 | + if (isLast && oldPageRoute != null) { | ||
| 185 | + _currentRoutePopped(oldPageRoute); | ||
| 186 | + final newPageRoute = pageRoutes[routes.last]; | ||
| 187 | + if (newPageRoute != null) _currentRouteChanged(newPageRoute); | ||
| 188 | + } | ||
| 172 | refresh(); | 189 | refresh(); | 
| 173 | } | 190 | } | 
| 174 | 191 | ||
| @@ -176,11 +193,28 @@ class GetDelegate extends RouterDelegate<GetPage> | @@ -176,11 +193,28 @@ class GetDelegate extends RouterDelegate<GetPage> | ||
| 176 | routes.add( | 193 | routes.add( | 
| 177 | route, | 194 | route, | 
| 178 | ); | 195 | ); | 
| 196 | + final pageRoute = | ||
| 197 | + pageRoutes[route] = PageRedirect(route, _notFound()).page(); | ||
| 198 | + _currentRouteChanged(pageRoute); | ||
| 179 | refresh(); | 199 | refresh(); | 
| 180 | } | 200 | } | 
| 181 | 201 | ||
| 182 | void addRoutes(List<GetPage> pages) { | 202 | void addRoutes(List<GetPage> pages) { | 
| 183 | routes.addAll(pages); | 203 | routes.addAll(pages); | 
| 204 | + for (var item in pages) { | ||
| 205 | + pageRoutes[item] = PageRedirect(item, _notFound()).page(); | ||
| 206 | + } | ||
| 207 | + final pageRoute = pageRoutes[routes.last]; | ||
| 208 | + if (pageRoute != null) _currentRouteChanged(pageRoute); | ||
| 184 | refresh(); | 209 | refresh(); | 
| 185 | } | 210 | } | 
| 211 | + | ||
| 212 | + void _currentRoutePopped(GetPageRoute route) { | ||
| 213 | + route.dispose(); | ||
| 214 | + } | ||
| 215 | + | ||
| 216 | + void _currentRouteChanged(GetPageRoute route) { | ||
| 217 | + //transition? | ||
| 218 | + //buildPage? -> in router outlet | ||
| 219 | + } | ||
| 186 | } | 220 | } | 
- 
Please register or login to post a comment