watchPosition static method

Future<Subscription> 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<Subscription> 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;

  final int watchId =
      await _methodChannel.invokeMethod('watchPosition', options);

  _watchPositionCallbacks[watchId] = onLocation;

  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 Subscription._(() async {
    await stopWatchPosition(watchId);
  });
}