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