startTracking method

Future<void> startTracking()

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;
        },
      );
}