Committed by
GitHub
Merge pull request #2148 from jonataslaw/refactor-nav
try fix middleware
Showing
11 changed files
with
93 additions
and
47 deletions
@@ -11,12 +11,12 @@ class EnsureAuthMiddleware extends GetMiddleware { | @@ -11,12 +11,12 @@ class EnsureAuthMiddleware extends GetMiddleware { | ||
11 | // await Future.delayed(Duration(milliseconds: 500)); | 11 | // await Future.delayed(Duration(milliseconds: 500)); |
12 | 12 | ||
13 | if (!AuthService.to.isLoggedInValue) { | 13 | if (!AuthService.to.isLoggedInValue) { |
14 | - final path = route.args.name as String; | 14 | + final path = route.pageSettings?.name as String; |
15 | final newRoute = Routes.LOGIN_THEN(path); | 15 | final newRoute = Routes.LOGIN_THEN(path); |
16 | 16 | ||
17 | return RouteDecoder.fromRoute(newRoute); | 17 | return RouteDecoder.fromRoute(newRoute); |
18 | } | 18 | } |
19 | - return await super.redirect(route); | 19 | + return super.redirect(route); |
20 | } | 20 | } |
21 | } | 21 | } |
22 | 22 | ||
@@ -30,6 +30,6 @@ class EnsureNotAuthedMiddleware extends GetMiddleware { | @@ -30,6 +30,6 @@ class EnsureNotAuthedMiddleware extends GetMiddleware { | ||
30 | //OR redirect user to another screen | 30 | //OR redirect user to another screen |
31 | //return RouteDecoder.fromRoute(Routes.PROFILE); | 31 | //return RouteDecoder.fromRoute(Routes.PROFILE); |
32 | } | 32 | } |
33 | - return await super.redirect(route); | 33 | + return super.redirect(route); |
34 | } | 34 | } |
35 | } | 35 | } |
@@ -21,7 +21,7 @@ class HomeView extends GetView<HomeController> { | @@ -21,7 +21,7 @@ class HomeView extends GetView<HomeController> { | ||
21 | return Scaffold( | 21 | return Scaffold( |
22 | body: GetRouterOutlet( | 22 | body: GetRouterOutlet( |
23 | initialRoute: Routes.DASHBOARD, | 23 | initialRoute: Routes.DASHBOARD, |
24 | - // anchorRoute: Routes.HOME, | 24 | + anchorRoute: Routes.HOME, |
25 | // key: Get.nestedKey(Routes.HOME), | 25 | // key: Get.nestedKey(Routes.HOME), |
26 | ), | 26 | ), |
27 | bottomNavigationBar: BottomNavigationBar( | 27 | bottomNavigationBar: BottomNavigationBar( |
@@ -19,7 +19,7 @@ class RootView extends GetView<RootController> { | @@ -19,7 +19,7 @@ class RootView extends GetView<RootController> { | ||
19 | ), | 19 | ), |
20 | body: GetRouterOutlet( | 20 | body: GetRouterOutlet( |
21 | initialRoute: Routes.HOME, | 21 | initialRoute: Routes.HOME, |
22 | - // anchorRoute: '/', | 22 | + anchorRoute: '/', |
23 | // filterPages: (afterAnchor) { | 23 | // filterPages: (afterAnchor) { |
24 | // return afterAnchor.take(1); | 24 | // return afterAnchor.take(1); |
25 | // }, | 25 | // }, |
@@ -76,7 +76,7 @@ extension ExtensionDialog on GetInterface { | @@ -76,7 +76,7 @@ extension ExtensionDialog on GetInterface { | ||
76 | Curve? transitionCurve, | 76 | Curve? transitionCurve, |
77 | String? name, | 77 | String? name, |
78 | RouteSettings? routeSettings, | 78 | RouteSettings? routeSettings, |
79 | - dynamic id, | 79 | + String? id, |
80 | }) { | 80 | }) { |
81 | assert(debugCheckHasMaterialLocalizations(context!)); | 81 | assert(debugCheckHasMaterialLocalizations(context!)); |
82 | 82 | ||
@@ -123,7 +123,7 @@ extension ExtensionDialog on GetInterface { | @@ -123,7 +123,7 @@ extension ExtensionDialog on GetInterface { | ||
123 | RouteTransitionsBuilder? transitionBuilder, | 123 | RouteTransitionsBuilder? transitionBuilder, |
124 | GlobalKey<NavigatorState>? navigatorKey, | 124 | GlobalKey<NavigatorState>? navigatorKey, |
125 | RouteSettings? routeSettings, | 125 | RouteSettings? routeSettings, |
126 | - dynamic id}) { | 126 | + String? id}) { |
127 | assert(!barrierDismissible || barrierLabel != null); | 127 | assert(!barrierDismissible || barrierLabel != null); |
128 | final key = navigatorKey ?? Get.nestedKey(id)?.navigatorKey; | 128 | final key = navigatorKey ?? Get.nestedKey(id)?.navigatorKey; |
129 | final nav = key?.currentState ?? | 129 | final nav = key?.currentState ?? |
@@ -149,7 +149,7 @@ extension ExtensionDialog on GetInterface { | @@ -149,7 +149,7 @@ extension ExtensionDialog on GetInterface { | ||
149 | EdgeInsetsGeometry? titlePadding, | 149 | EdgeInsetsGeometry? titlePadding, |
150 | TextStyle? titleStyle, | 150 | TextStyle? titleStyle, |
151 | Widget? content, | 151 | Widget? content, |
152 | - dynamic id, | 152 | + String? id, |
153 | EdgeInsetsGeometry? contentPadding, | 153 | EdgeInsetsGeometry? contentPadding, |
154 | VoidCallback? onConfirm, | 154 | VoidCallback? onConfirm, |
155 | VoidCallback? onCancel, | 155 | VoidCallback? onCancel, |
@@ -580,9 +580,9 @@ extension GetNavigationExt on GetInterface { | @@ -580,9 +580,9 @@ extension GetNavigationExt on GetInterface { | ||
580 | bool preventDuplicates = true, | 580 | bool preventDuplicates = true, |
581 | Map<String, String>? parameters, | 581 | Map<String, String>? parameters, |
582 | }) { | 582 | }) { |
583 | - if (preventDuplicates && page == currentRoute) { | ||
584 | - return null; | ||
585 | - } | 583 | + // if (preventDuplicates && page == currentRoute) { |
584 | + // return null; | ||
585 | + // } | ||
586 | 586 | ||
587 | if (parameters != null) { | 587 | if (parameters != null) { |
588 | final uri = Uri(path: page, queryParameters: parameters); | 588 | final uri = Uri(path: page, queryParameters: parameters); |
@@ -1076,12 +1076,16 @@ extension GetNavigationExt on GetInterface { | @@ -1076,12 +1076,16 @@ extension GetNavigationExt on GetInterface { | ||
1076 | return _getxController.addKey(newKey); | 1076 | return _getxController.addKey(newKey); |
1077 | } | 1077 | } |
1078 | 1078 | ||
1079 | - GetDelegate? nestedKey(dynamic key) { | 1079 | + GetDelegate? nestedKey(String? key) { |
1080 | + if (key == null) { | ||
1081 | + throw 'You need to define a ID'; | ||
1082 | + } | ||
1080 | keys.putIfAbsent( | 1083 | keys.putIfAbsent( |
1081 | key, | 1084 | key, |
1082 | () => GetDelegate( | 1085 | () => GetDelegate( |
1086 | + showHashOnUrl: true, | ||
1083 | //debugLabel: 'Getx nested key: ${key.toString()}', | 1087 | //debugLabel: 'Getx nested key: ${key.toString()}', |
1084 | - pages: [], | 1088 | + pages: RouteDecoder.fromRoute(key).currentChildrens ?? [], |
1085 | ), | 1089 | ), |
1086 | ); | 1090 | ); |
1087 | return keys[key]; | 1091 | return keys[key]; |
@@ -263,8 +263,11 @@ class GetMaterialApp extends StatelessWidget { | @@ -263,8 +263,11 @@ class GetMaterialApp extends StatelessWidget { | ||
263 | navigatorKey: navigatorKey, | 263 | navigatorKey: navigatorKey, |
264 | navigatorObservers: (navigatorObservers == null | 264 | navigatorObservers: (navigatorObservers == null |
265 | ? <NavigatorObserver>[GetObserver(routingCallback, Get.routing)] | 265 | ? <NavigatorObserver>[GetObserver(routingCallback, Get.routing)] |
266 | - : <NavigatorObserver>[GetObserver(routingCallback, Get.routing)] | ||
267 | - ..addAll(navigatorObservers!))); | 266 | + : <NavigatorObserver>[ |
267 | + GetObserver(routingCallback, Get.routing), | ||
268 | + ...navigatorObservers! | ||
269 | + ])); | ||
270 | + | ||
268 | final routeInformationParser = Get.createInformationParser( | 271 | final routeInformationParser = Get.createInformationParser( |
269 | initialRoute: initialRoute ?? | 272 | initialRoute: initialRoute ?? |
270 | getPages?.first.name ?? | 273 | getPages?.first.name ?? |
@@ -308,11 +308,11 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -308,11 +308,11 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
308 | } | 308 | } |
309 | 309 | ||
310 | @override | 310 | @override |
311 | - void goToUnknownPage([bool clearPages = false]) { | 311 | + Future<void> goToUnknownPage([bool clearPages = false]) async { |
312 | if (clearPages) _activePages.clear(); | 312 | if (clearPages) _activePages.clear(); |
313 | 313 | ||
314 | final pageSettings = _buildPageSettings(notFoundRoute.name); | 314 | final pageSettings = _buildPageSettings(notFoundRoute.name); |
315 | - final routeDecoder = _getRouteDecoder(pageSettings); | 315 | + final routeDecoder = await _getRouteDecoder(pageSettings); |
316 | 316 | ||
317 | _push(routeDecoder!); | 317 | _push(routeDecoder!); |
318 | } | 318 | } |
@@ -332,7 +332,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -332,7 +332,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
332 | Map<String, String>? parameters, | 332 | Map<String, String>? parameters, |
333 | }) async { | 333 | }) async { |
334 | final args = _buildPageSettings(page, arguments); | 334 | final args = _buildPageSettings(page, arguments); |
335 | - final route = _getRouteDecoder<T>(args); | 335 | + final route = await _getRouteDecoder<T>(args); |
336 | if (route != null) { | 336 | if (route != null) { |
337 | return _push<T>(route); | 337 | return _push<T>(route); |
338 | } else { | 338 | } else { |
@@ -380,7 +380,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -380,7 +380,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
380 | 380 | ||
381 | Get.addPage(getPage); | 381 | Get.addPage(getPage); |
382 | final args = _buildPageSettings(routeName, arguments); | 382 | final args = _buildPageSettings(routeName, arguments); |
383 | - final route = _getRouteDecoder<T>(args); | 383 | + final route = await _getRouteDecoder<T>(args); |
384 | final result = await _push<T>( | 384 | final result = await _push<T>( |
385 | route!, | 385 | route!, |
386 | rebuildStack: rebuildStack, | 386 | rebuildStack: rebuildStack, |
@@ -478,7 +478,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -478,7 +478,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
478 | Map<String, String>? parameters, | 478 | Map<String, String>? parameters, |
479 | }) async { | 479 | }) async { |
480 | final args = _buildPageSettings(page, arguments); | 480 | final args = _buildPageSettings(page, arguments); |
481 | - final route = _getRouteDecoder<T>(args); | 481 | + final route = await _getRouteDecoder<T>(args); |
482 | if (route == null) return null; | 482 | if (route == null) return null; |
483 | 483 | ||
484 | while (_activePages.length > 1) { | 484 | while (_activePages.length > 1) { |
@@ -497,7 +497,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -497,7 +497,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
497 | Map<String, String>? parameters, | 497 | Map<String, String>? parameters, |
498 | }) async { | 498 | }) async { |
499 | final args = _buildPageSettings(page, arguments); | 499 | final args = _buildPageSettings(page, arguments); |
500 | - final route = _getRouteDecoder<T>(args); | 500 | + final route = await _getRouteDecoder<T>(args); |
501 | if (route == null) return null; | 501 | if (route == null) return null; |
502 | 502 | ||
503 | final newPredicate = predicate ?? (route) => false; | 503 | final newPredicate = predicate ?? (route) => false; |
@@ -517,7 +517,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -517,7 +517,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
517 | Map<String, String>? parameters, | 517 | Map<String, String>? parameters, |
518 | }) async { | 518 | }) async { |
519 | final args = _buildPageSettings(page, arguments); | 519 | final args = _buildPageSettings(page, arguments); |
520 | - final route = _getRouteDecoder<T>(args); | 520 | + final route = await _getRouteDecoder<T>(args); |
521 | if (route == null) return null; | 521 | if (route == null) return null; |
522 | _popWithResult(); | 522 | _popWithResult(); |
523 | return _push<T>(route); | 523 | return _push<T>(route); |
@@ -531,7 +531,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -531,7 +531,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
531 | ]) async { | 531 | ]) async { |
532 | final arguments = _buildPageSettings(page, data); | 532 | final arguments = _buildPageSettings(page, data); |
533 | 533 | ||
534 | - final route = _getRouteDecoder<T>(arguments); | 534 | + final route = await _getRouteDecoder<T>(arguments); |
535 | 535 | ||
536 | if (route == null) return null; | 536 | if (route == null) return null; |
537 | 537 | ||
@@ -586,7 +586,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -586,7 +586,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
586 | Future<R?> backAndtoNamed<T, R>(String page, | 586 | Future<R?> backAndtoNamed<T, R>(String page, |
587 | {T? result, Object? arguments}) async { | 587 | {T? result, Object? arguments}) async { |
588 | final args = _buildPageSettings(page, arguments); | 588 | final args = _buildPageSettings(page, arguments); |
589 | - final route = _getRouteDecoder<R>(args); | 589 | + final route = await _getRouteDecoder<R>(args); |
590 | if (route == null) return null; | 590 | if (route == null) return null; |
591 | _popWithResult<T>(result); | 591 | _popWithResult<T>(result); |
592 | return _push<R>(route); | 592 | return _push<R>(route); |
@@ -625,11 +625,11 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -625,11 +625,11 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
625 | final index = _activePages.length > 1 ? _activePages.length - 1 : 0; | 625 | final index = _activePages.length > 1 ? _activePages.length - 1 : 0; |
626 | Get.addPage(page); | 626 | Get.addPage(page); |
627 | 627 | ||
628 | - final route = _getRouteDecoder(arguments); | 628 | + final activePage = await _getRouteDecoder(arguments); |
629 | 629 | ||
630 | - final activePage = _configureRouterDecoder<T>(route!, arguments); | 630 | + // final activePage = _configureRouterDecoder<T>(route!, arguments); |
631 | 631 | ||
632 | - _activePages[index] = activePage; | 632 | + _activePages[index] = activePage!; |
633 | 633 | ||
634 | refresh(); | 634 | refresh(); |
635 | final result = await activePage.route?.completer?.future as Future<T?>?; | 635 | final result = await activePage.route?.completer?.future as Future<T?>?; |
@@ -670,7 +670,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -670,7 +670,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
670 | } | 670 | } |
671 | 671 | ||
672 | @protected | 672 | @protected |
673 | - RouteDecoder? _getRouteDecoder<T>(PageSettings arguments) { | 673 | + Future<RouteDecoder?> _getRouteDecoder<T>(PageSettings arguments) async { |
674 | var page = arguments.uri.path; | 674 | var page = arguments.uri.path; |
675 | final parameters = arguments.params; | 675 | final parameters = arguments.params; |
676 | if (parameters.isNotEmpty) { | 676 | if (parameters.isNotEmpty) { |
@@ -681,7 +681,11 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -681,7 +681,11 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
681 | final decoder = Get.routeTree.matchRoute(page, arguments: arguments); | 681 | final decoder = Get.routeTree.matchRoute(page, arguments: arguments); |
682 | final route = decoder.route; | 682 | final route = decoder.route; |
683 | if (route == null) return null; | 683 | if (route == null) return null; |
684 | - return _configureRouterDecoder(decoder, arguments); | 684 | + |
685 | + final configure = _configureRouterDecoder(decoder, arguments); | ||
686 | + | ||
687 | + final router = await runMiddleware(configure); | ||
688 | + return router; | ||
685 | } | 689 | } |
686 | 690 | ||
687 | @protected | 691 | @protected |
@@ -701,20 +705,20 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -701,20 +705,20 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
701 | arguments: arguments, | 705 | arguments: arguments, |
702 | parameters: parameters, | 706 | parameters: parameters, |
703 | ); | 707 | ); |
708 | + | ||
704 | return decoder; | 709 | return decoder; |
705 | } | 710 | } |
706 | 711 | ||
707 | - Future<T?> _push<T>(RouteDecoder activePage, | 712 | + Future<T?> _push<T>(RouteDecoder res, |
708 | {bool rebuildStack = true, | 713 | {bool rebuildStack = true, |
709 | PreventDuplicateHandlingMode preventDuplicateHandlingMode = | 714 | PreventDuplicateHandlingMode preventDuplicateHandlingMode = |
710 | PreventDuplicateHandlingMode.ReorderRoutes}) async { | 715 | PreventDuplicateHandlingMode.ReorderRoutes}) async { |
711 | - final onStackPage = _activePages.firstWhereOrNull( | ||
712 | - (element) => element.route?.key == activePage.route?.key); | 716 | + final onStackPage = _activePages |
717 | + .firstWhereOrNull((element) => element.route?.key == res.route?.key); | ||
713 | 718 | ||
714 | /// There are no duplicate routes in the stack | 719 | /// There are no duplicate routes in the stack |
715 | if (onStackPage == null) { | 720 | if (onStackPage == null) { |
716 | - final res = await runMiddleware(activePage); | ||
717 | - _activePages.add(res!); | 721 | + _activePages.add(res); |
718 | } else { | 722 | } else { |
719 | /// There are duplicate routes, reorder | 723 | /// There are duplicate routes, reorder |
720 | switch (preventDuplicateHandlingMode) { | 724 | switch (preventDuplicateHandlingMode) { |
@@ -722,8 +726,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -722,8 +726,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
722 | break; | 726 | break; |
723 | case PreventDuplicateHandlingMode.ReorderRoutes: | 727 | case PreventDuplicateHandlingMode.ReorderRoutes: |
724 | _activePages.remove(onStackPage); | 728 | _activePages.remove(onStackPage); |
725 | - final res = await runMiddleware(onStackPage); | ||
726 | - _activePages.add(res!); | 729 | + _activePages.add(res); |
727 | break; | 730 | break; |
728 | case PreventDuplicateHandlingMode.PopUntilOriginalRoute: | 731 | case PreventDuplicateHandlingMode.PopUntilOriginalRoute: |
729 | while (_activePages.last == onStackPage) { | 732 | while (_activePages.last == onStackPage) { |
@@ -732,8 +735,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -732,8 +735,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
732 | break; | 735 | break; |
733 | case PreventDuplicateHandlingMode.Recreate: | 736 | case PreventDuplicateHandlingMode.Recreate: |
734 | _activePages.remove(onStackPage); | 737 | _activePages.remove(onStackPage); |
735 | - final res = await runMiddleware(activePage); | ||
736 | - _activePages.add(res!); | 738 | + _activePages.add(res); |
737 | break; | 739 | break; |
738 | default: | 740 | default: |
739 | } | 741 | } |
@@ -742,7 +744,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -742,7 +744,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
742 | refresh(); | 744 | refresh(); |
743 | } | 745 | } |
744 | 746 | ||
745 | - return activePage.route?.completer?.future as Future<T?>?; | 747 | + return res.route?.completer?.future as Future<T?>?; |
746 | } | 748 | } |
747 | 749 | ||
748 | @override | 750 | @override |
@@ -220,7 +220,7 @@ class PageRedirect { | @@ -220,7 +220,7 @@ class PageRedirect { | ||
220 | title: _r.title, | 220 | title: _r.title, |
221 | maintainState: _r.maintainState, | 221 | maintainState: _r.maintainState, |
222 | routeName: _r.name, | 222 | routeName: _r.name, |
223 | - settings: settings, | 223 | + settings: _r, |
224 | curve: _r.curve, | 224 | curve: _r.curve, |
225 | showCupertinoParallax: _r.showCupertinoParallax, | 225 | showCupertinoParallax: _r.showCupertinoParallax, |
226 | gestureWidth: _r.gestureWidth, | 226 | gestureWidth: _r.gestureWidth, |
@@ -259,7 +259,7 @@ class PageRedirect { | @@ -259,7 +259,7 @@ class PageRedirect { | ||
259 | if (match.route!.middlewares == null || match.route!.middlewares!.isEmpty) { | 259 | if (match.route!.middlewares == null || match.route!.middlewares!.isEmpty) { |
260 | return false; | 260 | return false; |
261 | } | 261 | } |
262 | - // final newSettings = runner.runRedirect(settings!.name); | 262 | + // final newSettings = runner.runRedirect(settings!.name); |
263 | // if (newSettings == null) { | 263 | // if (newSettings == null) { |
264 | // return false; | 264 | // return false; |
265 | // } | 265 | // } |
@@ -75,6 +75,8 @@ class _RouterOutletState<TDelegate extends RouterDelegate<T>, T extends Object> | @@ -75,6 +75,8 @@ class _RouterOutletState<TDelegate extends RouterDelegate<T>, T extends Object> | ||
75 | } | 75 | } |
76 | 76 | ||
77 | class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> { | 77 | class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> { |
78 | + | ||
79 | + | ||
78 | GetRouterOutlet({ | 80 | GetRouterOutlet({ |
79 | String? anchorRoute, | 81 | String? anchorRoute, |
80 | required String initialRoute, | 82 | required String initialRoute, |
@@ -99,7 +101,7 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> { | @@ -99,7 +101,7 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> { | ||
99 | } | 101 | } |
100 | return ret; | 102 | return ret; |
101 | }, | 103 | }, |
102 | - emptyPage: (delegate) => | 104 | + emptyPage: (delegate) => |
103 | Get.routeTree.matchRoute(initialRoute).route ?? | 105 | Get.routeTree.matchRoute(initialRoute).route ?? |
104 | delegate.notFoundRoute, | 106 | delegate.notFoundRoute, |
105 | key: Get.nestedKey(anchorRoute)?.navigatorKey, | 107 | key: Get.nestedKey(anchorRoute)?.navigatorKey, |
@@ -137,7 +139,7 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> { | @@ -137,7 +139,7 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> { | ||
137 | return (emptyWidget?.call(rDelegate) ?? SizedBox.shrink()); | 139 | return (emptyWidget?.call(rDelegate) ?? SizedBox.shrink()); |
138 | }, | 140 | }, |
139 | pickPages: pickPages, | 141 | pickPages: pickPages, |
140 | - delegate: delegate ?? GetMaterialController.to.rootDelegate, | 142 | + delegate: delegate ?? Get.rootController.rootDelegate, |
141 | ); | 143 | ); |
142 | 144 | ||
143 | GetRouterOutlet.builder({ | 145 | GetRouterOutlet.builder({ |
@@ -57,8 +57,7 @@ mixin ListNotifierSingleMixin on Listenable { | @@ -57,8 +57,7 @@ mixin ListNotifierSingleMixin on Listenable { | ||
57 | } | 57 | } |
58 | 58 | ||
59 | void _notifyUpdate() { | 59 | void _notifyUpdate() { |
60 | - final list = _updaters?.toList() ?? []; | ||
61 | - for (var element in list) { | 60 | + for (var element in _updaters!) { |
62 | element(); | 61 | element(); |
63 | } | 62 | } |
64 | } | 63 | } |
1 | name: get | 1 | name: get |
2 | description: Open screens/snackbars/dialogs without context, manage states and inject dependencies easily with GetX. | 2 | description: Open screens/snackbars/dialogs without context, manage states and inject dependencies easily with GetX. |
3 | -version: 5.0.0-beta.14 | 3 | +version: 5.0.0-beta.15 |
4 | homepage: https://github.com/jonataslaw/getx | 4 | homepage: https://github.com/jonataslaw/getx |
5 | 5 | ||
6 | environment: | 6 | environment: |
@@ -11,11 +11,23 @@ class RedirectMiddleware extends GetMiddleware { | @@ -11,11 +11,23 @@ class RedirectMiddleware extends GetMiddleware { | ||
11 | // } | 11 | // } |
12 | 12 | ||
13 | @override | 13 | @override |
14 | - Future<RouteDecoder?> redirectDelegate(RouteDecoder route) async { | 14 | + Future<RouteDecoder?> redirect(RouteDecoder route) async { |
15 | return RouteDecoder.fromRoute('/second'); | 15 | return RouteDecoder.fromRoute('/second'); |
16 | } | 16 | } |
17 | } | 17 | } |
18 | 18 | ||
19 | +class RedirectMiddlewareNull extends GetMiddleware { | ||
20 | + // @override | ||
21 | + // RouteSettings redirect(String? route) { | ||
22 | + // return RouteSettings(name: '/second'); | ||
23 | + // } | ||
24 | + | ||
25 | + @override | ||
26 | + Future<RouteDecoder?> redirect(RouteDecoder route) async { | ||
27 | + return route; | ||
28 | + } | ||
29 | +} | ||
30 | + | ||
19 | void main() { | 31 | void main() { |
20 | testWidgets("Middleware redirect smoke test", (tester) async { | 32 | testWidgets("Middleware redirect smoke test", (tester) async { |
21 | await tester.pumpWidget( | 33 | await tester.pumpWidget( |
@@ -38,4 +50,28 @@ void main() { | @@ -38,4 +50,28 @@ void main() { | ||
38 | print(Get.rootController.rootDelegate.currentConfiguration?.route?.name); | 50 | print(Get.rootController.rootDelegate.currentConfiguration?.route?.name); |
39 | expect(find.byType(SecondScreen), findsOneWidget); | 51 | expect(find.byType(SecondScreen), findsOneWidget); |
40 | }); | 52 | }); |
53 | + | ||
54 | + testWidgets("Middleware redirect null test", (tester) async { | ||
55 | + await tester.pumpWidget( | ||
56 | + GetMaterialApp( | ||
57 | + initialRoute: '/', | ||
58 | + getPages: [ | ||
59 | + GetPage(name: '/', page: () => Container()), | ||
60 | + GetPage(name: '/first', page: () => FirstScreen(), middlewares: [ | ||
61 | + RedirectMiddlewareNull(), | ||
62 | + ]), | ||
63 | + GetPage(name: '/second', page: () => SecondScreen()), | ||
64 | + GetPage(name: '/third', page: () => ThirdScreen()), | ||
65 | + ], | ||
66 | + ), | ||
67 | + ); | ||
68 | + | ||
69 | + await tester.pump(); | ||
70 | + | ||
71 | + Get.toNamed('/first'); | ||
72 | + | ||
73 | + await tester.pumpAndSettle(); | ||
74 | + print(Get.rootController.rootDelegate.currentConfiguration?.route?.name); | ||
75 | + expect(find.byType(FirstScreen), findsOneWidget); | ||
76 | + }); | ||
41 | } | 77 | } |
-
Please register or login to post a comment