Jonny Borges
Committed by GitHub

Merge pull request #2148 from jonataslaw/refactor-nav

try fix middleware
@@ -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 }