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