onBefore method

  1. @override
Future<GuardResult> onBefore(
  1. RouteContext context
)
override

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;
}