typedef NavigationGuardCallback = Future Function(); class NavigationGuard { static NavigationGuardCallback? _callback; static void register(NavigationGuardCallback callback) { _callback = callback; } static void unregister(NavigationGuardCallback callback) { if (_callback == callback) { _callback = null; } } static Future attemptNavigation( Future Function() performNavigation, ) async { if (_promptActive) return; final cb = _callback; if (cb == null) { await performNavigation(); return; } _promptActive = true; bool allow = false; try { allow = await cb(); } catch (_) { allow = false; } finally { _promptActive = false; } if (allow) { await performNavigation(); } } static bool _promptActive = false; }