diff --git a/flutter_modular/lib/src/core/interfaces/modular_route.dart b/flutter_modular/lib/src/core/interfaces/modular_route.dart index 44bcf3c0..81ac355f 100644 --- a/flutter_modular/lib/src/core/interfaces/modular_route.dart +++ b/flutter_modular/lib/src/core/interfaces/modular_route.dart @@ -14,6 +14,7 @@ typedef ModularChild = Widget Function(BuildContext context, ModularArguments ar abstract class ModularRoute { Module? get currentModule; + @Deprecated('Use RouteGuard.guardedRoute') String? guardedRoute; ModularArguments get args; diff --git a/flutter_modular/lib/src/core/interfaces/route_guard.dart b/flutter_modular/lib/src/core/interfaces/route_guard.dart index 0de7fac3..637e9157 100644 --- a/flutter_modular/lib/src/core/interfaces/route_guard.dart +++ b/flutter_modular/lib/src/core/interfaces/route_guard.dart @@ -4,5 +4,9 @@ import 'modular_route.dart'; // ignore: one_member_abstracts abstract class RouteGuard { + RouteGuard(this.guardedRoute); + + final String? guardedRoute; + Future canActivate(String path, ModularRoute router); -} +} \ No newline at end of file diff --git a/flutter_modular/lib/src/presenters/navigation/modular_route_information_parser.dart b/flutter_modular/lib/src/presenters/navigation/modular_route_information_parser.dart index c507aa2f..8f22eea6 100644 --- a/flutter_modular/lib/src/presenters/navigation/modular_route_information_parser.dart +++ b/flutter_modular/lib/src/presenters/navigation/modular_route_information_parser.dart @@ -249,7 +249,11 @@ class ModularRouteInformationParser extends RouteInformationParser for (var guard in router.guards ?? []) { try { final result = await guard.canActivate(path, router); - if (!result && router.guardedRoute != null && !isRouterOutlet) { + if(!result && guard.guardedRoute != null && !isRouterOutlet){ + print(ModularError('$path is CAN\'T ACTIVATE')); + print('redirect to \'${guard.guardedRoute}\''); + return await selectRoute(guard.guardedRoute!); + } else if (!result && router.guardedRoute != null && !isRouterOutlet) { print(ModularError('$path is CAN\'T ACTIVATE')); print('redirect to \'${router.guardedRoute}\''); return await selectRoute(router.guardedRoute!); diff --git a/flutter_modular/test/src/core/interfaces/route_guard_test.dart b/flutter_modular/test/src/core/interfaces/route_guard_test.dart index d88c3b2d..7f28bcc9 100644 --- a/flutter_modular/test/src/core/interfaces/route_guard_test.dart +++ b/flutter_modular/test/src/core/interfaces/route_guard_test.dart @@ -27,8 +27,7 @@ class ModuleMock extends Module { ChildRoute( '/guarded', child: (context, args) => Container(), - guards: [MyGuardedRoute()], - guardedRoute: guardedRoute, + guards: [MyGuardedRoute(guardedRoute: guardedRoute)], ), ChildRoute( '/redirected', @@ -37,7 +36,9 @@ class ModuleMock extends Module { ]; } -class MyGuardedRoute implements RouteGuard { +class MyGuardedRoute extends RouteGuard { + MyGuardedRoute({String? guardedRoute}) : super(guardedRoute); + @override Future canActivate(String path, ModularRoute route) async { if (path == '/guarded') { diff --git a/flutter_modular/test/src/presenters/navigation/modular_route_information_parse_test.dart b/flutter_modular/test/src/presenters/navigation/modular_route_information_parse_test.dart index 57acc032..2bd7e76d 100644 --- a/flutter_modular/test/src/presenters/navigation/modular_route_information_parse_test.dart +++ b/flutter_modular/test/src/presenters/navigation/modular_route_information_parse_test.dart @@ -396,7 +396,9 @@ class CustomWidget extends StatelessWidget { } } -class MyGuard implements RouteGuard { +class MyGuard extends RouteGuard { + MyGuard({String? guardedRoute}) : super(guardedRoute); + @override Future canActivate(String path, ModularRoute route) async { if (path == '/401') { @@ -409,7 +411,9 @@ class MyGuard implements RouteGuard { } } -class MyGuardModule implements RouteGuard { +class MyGuardModule extends RouteGuard { + MyGuardModule({String? guardedRoute}) : super(guardedRoute); + @override Future canActivate(String path, ModularRoute route) async { if (path == '/guarded/list') {