watchPosition method

Stream<Geoposition> watchPosition({
  1. bool? enableHighAccuracy,
  2. Duration? timeout,
  3. Duration? maximumAge,
})

Implementation

Stream<Geoposition> watchPosition({
  bool? enableHighAccuracy,
  Duration? timeout,
  Duration? maximumAge,
}) {
  var options = {};
  if (enableHighAccuracy != null) {
    options['enableHighAccuracy'] = enableHighAccuracy;
  }
  if (timeout != null) {
    options['timeout'] = timeout.inMilliseconds;
  }
  if (maximumAge != null) {
    options['maximumAge'] = maximumAge.inMilliseconds;
  }

  int? watchId;
  StreamController<Geoposition> controller =
      new StreamController<Geoposition>(
        sync: true,
        onCancel: () {
          final id = watchId;
          if (id != null) _clearWatch(id);
        },
      );
  controller.onListen = () {
    assert(watchId == null);
    watchId = _watchPosition(
      (position) {
        controller.add(_ensurePosition(position));
      },
      (error) {
        controller.addError(error);
      },
      options,
    );
  };

  return controller.stream;
}