startTracking method
Starts the continuous location tracking stream if not already active.
Implementation
Future<void> startTracking() async {
if (_positionStreamSubscription != null) return; // Already active and listening
final hasPermission = await requestPermissions();
if (!hasPermission) return;
LocationSettings locationSettings;
if (defaultTargetPlatform == TargetPlatform.android) {
locationSettings = AndroidSettings(
accuracy: LocationAccuracy.bestForNavigation,
distanceFilter: 0,
intervalDuration: const Duration(seconds: 1),
forceLocationManager: false,
);
} else if (defaultTargetPlatform == TargetPlatform.iOS) {
locationSettings = AppleSettings(
accuracy: LocationAccuracy.bestForNavigation,
distanceFilter: 2,
// Required for iOS to continue delivering location updates
// when the app is briefly backgrounded during navigation.
allowBackgroundLocationUpdates: true,
showBackgroundLocationIndicator: true,
pauseLocationUpdatesAutomatically: false,
activityType: ActivityType.automotiveNavigation,
);
} else {
locationSettings = const LocationSettings(
accuracy: LocationAccuracy.bestForNavigation,
distanceFilter: 2,
);
}
_positionStreamSubscription =
Geolocator.getPositionStream(locationSettings: locationSettings).listen(
(Position position) {
currentLocation.value = position;
},
);
}