Showing
6 changed files
with
52 additions
and
66 deletions
@@ -21,6 +21,7 @@ class HomeView extends GetView<HomeController> { | @@ -21,6 +21,7 @@ class HomeView extends GetView<HomeController> { | ||
21 | } | 21 | } |
22 | return Scaffold( | 22 | return Scaffold( |
23 | body: GetRouterOutlet( | 23 | body: GetRouterOutlet( |
24 | + name: Routes.HOME, | ||
24 | emptyPage: (delegate) => DashboardView(), | 25 | emptyPage: (delegate) => DashboardView(), |
25 | pickPages: (currentNavStack) { | 26 | pickPages: (currentNavStack) { |
26 | print('Home RouterOutlet: $currentNavStack'); | 27 | print('Home RouterOutlet: $currentNavStack'); |
@@ -19,6 +19,7 @@ class RootView extends GetView<RootController> { | @@ -19,6 +19,7 @@ class RootView extends GetView<RootController> { | ||
19 | centerTitle: true, | 19 | centerTitle: true, |
20 | ), | 20 | ), |
21 | body: GetRouterOutlet( | 21 | body: GetRouterOutlet( |
22 | + name: '/', | ||
22 | emptyPage: (delegate) { | 23 | emptyPage: (delegate) { |
23 | return Center( | 24 | return Center( |
24 | child: Column( | 25 | child: Column( |
@@ -42,12 +42,14 @@ class AppPages { | @@ -42,12 +42,14 @@ class AppPages { | ||
42 | name: _Paths.PROFILE, | 42 | name: _Paths.PROFILE, |
43 | page: () => ProfileView(), | 43 | page: () => ProfileView(), |
44 | title: 'Profile', | 44 | title: 'Profile', |
45 | + transition: Transition.size, | ||
45 | binding: ProfileBinding(), | 46 | binding: ProfileBinding(), |
46 | ), | 47 | ), |
47 | GetPage( | 48 | GetPage( |
48 | name: _Paths.PRODUCTS, | 49 | name: _Paths.PRODUCTS, |
49 | page: () => ProductsView(), | 50 | page: () => ProductsView(), |
50 | title: 'Products', | 51 | title: 'Products', |
52 | + transition: Transition.zoom, | ||
51 | binding: ProductsBinding(), | 53 | binding: ProductsBinding(), |
52 | children: [ | 54 | children: [ |
53 | GetPage( | 55 | GetPage( |
@@ -2,7 +2,6 @@ import 'dart:async'; | @@ -2,7 +2,6 @@ import 'dart:async'; | ||
2 | 2 | ||
3 | import 'package:flutter/foundation.dart'; | 3 | import 'package:flutter/foundation.dart'; |
4 | import 'package:flutter/material.dart'; | 4 | import 'package:flutter/material.dart'; |
5 | -import 'package:get/get_navigation/src/nav2/router_outlet.dart'; | ||
6 | import '../../../get.dart'; | 5 | import '../../../get.dart'; |
7 | import '../../../get_state_manager/src/simple/list_notifier.dart'; | 6 | import '../../../get_state_manager/src/simple/list_notifier.dart'; |
8 | 7 | ||
@@ -343,3 +342,37 @@ class GetDelegate extends RouterDelegate<GetNavConfig> | @@ -343,3 +342,37 @@ class GetDelegate extends RouterDelegate<GetNavConfig> | ||
343 | return true; | 342 | return true; |
344 | } | 343 | } |
345 | } | 344 | } |
345 | + | ||
346 | +class GetNavigator extends StatelessWidget { | ||
347 | + const GetNavigator({ | ||
348 | + Key? key, | ||
349 | + this.navigatorKey, | ||
350 | + required this.onPopPage, | ||
351 | + required this.pages, | ||
352 | + this.observers, | ||
353 | + this.transitionDelegate, | ||
354 | + required this.name, | ||
355 | + }) : super(key: key); | ||
356 | + final GlobalKey<NavigatorState>? navigatorKey; | ||
357 | + final bool Function(Route<dynamic>, dynamic) onPopPage; | ||
358 | + final List<Page> pages; | ||
359 | + final List<NavigatorObserver>? observers; | ||
360 | + final TransitionDelegate? transitionDelegate; | ||
361 | + final String name; | ||
362 | + | ||
363 | + @override | ||
364 | + Widget build(BuildContext context) { | ||
365 | + Get.key; | ||
366 | + return Navigator( | ||
367 | + key: navigatorKey ?? Get.nestedKey(name), | ||
368 | + onPopPage: onPopPage, | ||
369 | + pages: pages, | ||
370 | + observers: [ | ||
371 | + GetObserver(), | ||
372 | + if (observers != null) ...observers!, | ||
373 | + ], | ||
374 | + transitionDelegate: | ||
375 | + transitionDelegate ?? const DefaultTransitionDelegate<dynamic>(), | ||
376 | + ); | ||
377 | + } | ||
378 | +} |
@@ -20,18 +20,17 @@ class RouterOutlet<TDelegate extends RouterDelegate<T>, T extends Object> | @@ -20,18 +20,17 @@ class RouterOutlet<TDelegate extends RouterDelegate<T>, T extends Object> | ||
20 | 20 | ||
21 | RouterOutlet({ | 21 | RouterOutlet({ |
22 | TDelegate? delegate, | 22 | TDelegate? delegate, |
23 | - required List<RouteSettings> Function(T currentNavStack) pickPages, | 23 | + required List<GetPage> Function(T currentNavStack) pickPages, |
24 | required Widget Function( | 24 | required Widget Function( |
25 | BuildContext context, | 25 | BuildContext context, |
26 | TDelegate, | 26 | TDelegate, |
27 | - RouteSettings? page, | 27 | + GetPage? page, |
28 | ) | 28 | ) |
29 | pageBuilder, | 29 | pageBuilder, |
30 | }) : this.builder( | 30 | }) : this.builder( |
31 | builder: (context, rDelegate, currentConfig) { | 31 | builder: (context, rDelegate, currentConfig) { |
32 | - final picked = currentConfig == null | ||
33 | - ? <RouteSettings>[] | ||
34 | - : pickPages(currentConfig); | 32 | + final picked = |
33 | + currentConfig == null ? <GetPage>[] : pickPages(currentConfig); | ||
35 | if (picked.length == 0) { | 34 | if (picked.length == 0) { |
36 | return pageBuilder(context, rDelegate, null); | 35 | return pageBuilder(context, rDelegate, null); |
37 | } | 36 | } |
@@ -92,15 +91,20 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, GetNavConfig> { | @@ -92,15 +91,20 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, GetNavConfig> { | ||
92 | GetRouterOutlet({ | 91 | GetRouterOutlet({ |
93 | Widget Function(GetDelegate delegate)? emptyPage, | 92 | Widget Function(GetDelegate delegate)? emptyPage, |
94 | required List<GetPage> Function(GetNavConfig currentNavStack) pickPages, | 93 | required List<GetPage> Function(GetNavConfig currentNavStack) pickPages, |
94 | + bool Function(Route<dynamic>, dynamic)? onPopPage, | ||
95 | + required String name, | ||
95 | }) : super( | 96 | }) : super( |
96 | pageBuilder: (context, rDelegate, page) { | 97 | pageBuilder: (context, rDelegate, page) { |
97 | final pageRoute = rDelegate.getPageRoute(page); | 98 | final pageRoute = rDelegate.getPageRoute(page); |
99 | + | ||
98 | if (page != null) { | 100 | if (page != null) { |
99 | - //TODO: transitions go here ! | ||
100 | - return pageRoute.buildPage( | ||
101 | - context, | ||
102 | - pageRoute.animation, | ||
103 | - pageRoute.secondaryAnimation, | 101 | + return GetNavigator( |
102 | + onPopPage: onPopPage ?? | ||
103 | + (a, c) { | ||
104 | + return true; | ||
105 | + }, | ||
106 | + pages: [page], | ||
107 | + name: name, | ||
104 | ); | 108 | ); |
105 | } | 109 | } |
106 | 110 |
@@ -161,59 +161,4 @@ class GetPage<T> extends Page<T> { | @@ -161,59 +161,4 @@ class GetPage<T> extends Page<T> { | ||
161 | unknownRoute, | 161 | unknownRoute, |
162 | ).page<T>(); | 162 | ).page<T>(); |
163 | } | 163 | } |
164 | - | ||
165 | - @override | ||
166 | - bool operator ==(Object other) { | ||
167 | - if (identical(this, other)) return true; | ||
168 | - if (other is GetPage<T>) { | ||
169 | - print(other.path.hashCode == path.hashCode); | ||
170 | - } | ||
171 | - | ||
172 | - return other is GetPage<T> && | ||
173 | - other.page.runtimeType == page.runtimeType && | ||
174 | - other.popGesture == popGesture && | ||
175 | - // mapEquals(other.parameter, parameter) && | ||
176 | - | ||
177 | - other.preventDuplicates == preventDuplicates && | ||
178 | - other.title == title && | ||
179 | - other.transition == transition && | ||
180 | - other.curve == curve && | ||
181 | - other.alignment == alignment && | ||
182 | - other.maintainState == maintainState && | ||
183 | - other.opaque == opaque && | ||
184 | - other.binding == binding && | ||
185 | - // listEquals(other.bindings, bindings) && | ||
186 | - other.customTransition == customTransition && | ||
187 | - other.transitionDuration == transitionDuration && | ||
188 | - other.fullscreenDialog == fullscreenDialog && | ||
189 | - other.name == name && | ||
190 | - // listEquals(other.children, children) && | ||
191 | - // listEquals(other.middlewares, middlewares) && | ||
192 | - other.path == path && | ||
193 | - other.unknownRoute == unknownRoute; | ||
194 | - } | ||
195 | - | ||
196 | - @override | ||
197 | - int get hashCode { | ||
198 | - return //page.hashCode ^ | ||
199 | - popGesture.hashCode ^ | ||
200 | - // parameter.hashCode ^ | ||
201 | - preventDuplicates.hashCode ^ | ||
202 | - title.hashCode ^ | ||
203 | - transition.hashCode ^ | ||
204 | - curve.hashCode ^ | ||
205 | - alignment.hashCode ^ | ||
206 | - maintainState.hashCode ^ | ||
207 | - opaque.hashCode ^ | ||
208 | - binding.hashCode ^ | ||
209 | - // bindings.hashCode ^ | ||
210 | - customTransition.hashCode ^ | ||
211 | - transitionDuration.hashCode ^ | ||
212 | - fullscreenDialog.hashCode ^ | ||
213 | - name.hashCode ^ | ||
214 | - // children.hashCode ^ | ||
215 | - // middlewares.hashCode ^ | ||
216 | - path.hashCode ^ | ||
217 | - unknownRoute.hashCode; | ||
218 | - } | ||
219 | } | 164 | } |
-
Please register or login to post a comment