onBefore method
Called before navigation to the route.
Return next to continue navigation, or redirect/abort to stop.
Example:
@override
Future<GuardResult> onBefore(RouteContext context) async {
if (!await hasPermission()) {
return redirect('/unauthorized');
}
return next();
}
Implementation
@override
Future<GuardResult> onBefore(RouteContext context) async {
RouteContext currentContext = context;
for (final guard in guards) {
guard.setRouteContext(currentContext);
final result = await guard.onBefore(currentContext);
if (result == GuardResult.handled) {
// Propagate redirect config if set
if (guard.redirectConfig != null) {
_redirectConfig = guard.redirectConfig;
}
return GuardResult.handled;
}
// Pass modified data to next guard
if (guard.hasModifiedData) {
currentContext = currentContext.withData(guard.modifiedData);
}
}
// Propagate final modified data
if (currentContext.data != context.data) {
setData(currentContext.data);
}
return GuardResult.next;
}