Files
mileograph_flutter/lib/services/navigation_guard.dart
Pete Gregory 603e117af8
All checks were successful
Release / meta (push) Successful in 8s
Release / linux-build (push) Successful in 6m18s
Release / android-build (push) Successful in 16m30s
Release / release-master (push) Successful in 24s
Release / release-dev (push) Successful in 27s
add draft changes
2025-12-14 23:30:45 +00:00

41 lines
857 B
Dart

typedef NavigationGuardCallback = Future<bool> 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<void> attemptNavigation(
Future<void> 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;
}