flutter_modular: ^5.0.3. return GuardedRouteException or RouteNotFoundException

Discussão em 'Angular' iniciado por Sahil Kumar, Abril 23, 2025.

  1. Sahil Kumar

    Sahil Kumar Guest

    I try to navigate from recruiter to recruiter/task inside the Children of recruiter ModuleRoute.

    Here I want to Open TaskPage on RouterOutlet.

    Package Used

    flutter_modular: ^5.0.3


    Routes list ---

    @override
    List<ModularRoute> get routes => [
    ChildRoute('/', child: (context, args) => RecruiterLandingPage(),
    children: [
    ChildRoute('/tasks',
    child: (context, args) =>TasksPage(),
    transition: TransitionType.noTransition,

    ),
    ];


    RecruiterLandingPage

    I use :

    Modular.to.navigate('/tasks');


    It returns Exception

    Error: RouteNotFoundException: Route (/tasks) not found
    dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 266:49 throw_
    packages/flutter_modular/src/presenter/navigation/modular_route_information_parser.dart 111:9 <fn>
    dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54 runBody
    dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5 _async
    packages/flutter_modular/src/presenter/navigation/modular_route_information_parser.dart 109:56 <fn>
    packages/flutter_modular/src/shared/either.dart 46:18 fold
    packages/flutter_modular/src/presenter/navigation/modular_route_information_parser.dart 109:24 selectRoute
    dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 45:50 <fn>
    dart-sdk/lib/async/zone.dart 1653:54 runUnary
    dart-sdk/lib/async/future_impl.dart 147:18 handleValue
    dart-sdk/lib/async/future_impl.dart 766:44 handleValueCallback
    dart-sdk/lib/async/future_impl.dart 795:13 _propagateToListeners
    dart-sdk/lib/async/future_impl.dart 566:5 [_completeWithValue]
    dart-sdk/lib/async/future_impl.dart 639:7 callback
    dart-sdk/lib/async/schedule_microtask.dart 40:11 _microtaskLoop
    dart-sdk/lib/async/schedule_microtask.dart 49:5 _startMicrotaskLoop
    dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 166:15 <fn>


    and When I Use :

    Modular.to.navigate('/recruiter/tasks');


    It returns Exception

    Error: GuardedRouteException: /recruiter/
    dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 266:49 throw_
    packages/flutter_modular/src/presenter/guards/route_guard.dart 31:5 pos
    dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 45:50 <fn>
    dart-sdk/lib/async/zone.dart 1653:54 runUnary
    dart-sdk/lib/async/future_impl.dart 147:18 handleValue
    dart-sdk/lib/async/future_impl.dart 766:44 handleValueCallback
    dart-sdk/lib/async/future_impl.dart 795:13 _propagateToListeners
    dart-sdk/lib/async/future_impl.dart 566:5 [_completeWithValue]
    dart-sdk/lib/async/future_impl.dart 639:7 callback
    dart-sdk/lib/async/schedule_microtask.dart 40:11 _microtaskLoop
    dart-sdk/lib/async/schedule_microtask.dart 49:5 _startMicrotaskLoop
    dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 166:15 <fn>


    recruiter Route Open by using :

    ModuleRoute("/recruiter", module: RecruiterModule(),
    guards: [AuthGuard(), Modular.get<RoleGuardVerify>().getGuard(RoleGuardVerify.RECRUITER)]
    ),


    Authguard

    import 'package:/authentication/ui/bloc/user_status/user_status_bloc.dart';
    import 'package:flutter_modular/flutter_modular.dart';

    class AuthGuard extends RouteGuard {
    AuthGuard() : super();

    @override
    Future<bool> canActivate(String path, ModularRoute router) async {
    var bloc = Modular.get<UserStatusBloc>();
    bloc.add(UserStatusLoadStarted());

    return bloc.state is UserStatusLogin;
    }
    }


    RoleGuardVerify

    import 'package:---/app/role_guard.dart';
    import 'package:----/authentication/ui/bloc/user_status/user_status_bloc.dart';
    import 'package:flutter_modular/flutter_modular.dart';

    class RoleGuardVerify {
    static final int RECRUITER = 1;
    static final int CONSULTANT = 2;
    static final int MANAGER = 3;

    Map<int, String> redirectByRole = {
    RECRUITER: "/recruiter",
    CONSULTANT: "/consultant",
    MANAGER: "/manager"
    };

    RouteGuard getGuard(int guardRoleType) {
    try {
    var bloc = Modular.get<UserStatusBloc>();
    if (!(bloc.state is UserStatusLogin)) {
    return RoleGuard(guardRoleType, "/login");
    }
    var user = (bloc.state as UserStatusLogin).user;
    var redirect = redirectByRole[user.role];
    if(redirect != null) {

    return RoleGuard(guardRoleType, redirect);
    }else{
    return RoleGuard(guardRoleType, '/recruiter');
    }
    } catch (e) {

    return RoleGuard(guardRoleType, "/login");
    }
    }
    }


    In my opinion, The Guards I created are not returning GuardedRouteException. I want the right way to do navigation.

    I used the link(https://modular.flutterando.com.br/docs/flutter_modular/navegation) for this navigation.

    Continue reading...

Compartilhe esta Página