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