Fix possible race condition that caused a rare crash

This commit is contained in:
stopflock
2026-09-04 20:01:14 -05:00
parent cbdefa82fb
commit c95171a3ad
3 changed files with 25 additions and 2 deletions
@@ -0,0 +1,21 @@
import 'package:geolocator/geolocator.dart';
/// Single-flight guard around [Geolocator.requestPermission].
///
/// The Android geolocator plugin can only track one in-flight permission
/// request at a time. If a second `requestPermission()` call is made while
/// the system dialog from a first call is still pending, the plugin tries to
/// reply to the same result callback twice and crashes with
/// `IllegalStateException: Reply already submitted`.
///
/// We have more than one place in the app that may want to (re)check/request
/// location permission around app startup (GPS controller, first-launch
/// prompt). Rather than coordinate all of them, just make sure only one real
/// native call is ever in flight - everyone else awaits that same result.
Future<LocationPermission>? _inFlight;
Future<LocationPermission> requestLocationPermissionOnce() {
return _inFlight ??= Geolocator.requestPermission().whenComplete(() {
_inFlight = null;
});
}