onNavigation method

  1. @override
Future<void> onNavigation(
  1. NavigationResolver resolver,
  2. StackRouter router
)

clients will call resolver.next(true --> default) to continue navigation or resolver.next(false) to abort navigation example

Implementation

@override
Future<void> onNavigation(
  NavigationResolver resolver,
  StackRouter router,
) async {
  final isSatisfied = await guard.checkIfSatisfied;
  if (isSatisfied) {
    if (false == resolver.isResolved) resolver.next();
  } else {
    await resolver.redirectUntil(
      redirectRoute(({required bool isSatisfied}) async {
        if (isSatisfied) {
          await guard.update(isSatisfied: true);
          resolver.next();
        } else {
          resolver.next(false);
        }
      }),
      onFailure: (failure) {
        log('Guard failed with ${failure.runtimeType} error: $failure');
      },
    );
    // router.navigatePath(guard.redirectPath);
  }
}