Jonny Borges

add transitions to nav 2 and GetNavigator

@@ -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 }