watchPosition static method

Future<int> watchPosition({
  1. int? timeout,
  2. int? interval,
  3. bool? persist,
  4. int? desiredAccuracy,
  5. Map<String, dynamic>? extras,
  6. void onLocation(
    1. Location
    )?,
})

Implementation

static Future<int> watchPosition({
  int? timeout,
  int? interval,
  bool? persist,
  int? desiredAccuracy,
  Map<String, dynamic>? extras,
  void Function(Location)? onLocation,
}) async {
  final options = <String, dynamic>{};
  if (timeout != null) options['timeout'] = timeout;
  if (interval != null) options['interval'] = interval;
  if (persist != null) options['persist'] = persist;
  if (desiredAccuracy != null) options['desiredAccuracy'] = desiredAccuracy;
  if (extras != null) options['extras'] = extras;

  // Call native iOS method and await the watchId
  final int watchId =
      await _methodChannel.invokeMethod('watchPosition', options);

  _watchPositionCallbacks[watchId] = onLocation;

  print("*** watchPositionCallbacks: $_watchPositionCallbacks");

  // Ensure we start the stream only once
  if (!_isWatchPositionStreamInitialized) {
    _eventChannelWatchPosition.receiveBroadcastStream().listen((event) {
      final int id = event['streamId'];
      final location = Location(event['location']);
      final callback = _watchPositionCallbacks[id];
      if (callback != null) {
        callback(location);
      }
    });
    _isWatchPositionStreamInitialized = true;
  }

  return watchId;
}