watchPosition method

Stream<Geoposition> watchPosition ({bool enableHighAccuracy, Duration timeout, 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;
  // TODO(jacobr): it seems like a bug that we have to specifiy the static
  // type here for controller.stream to have the right type.
  // dartbug.com/26278
  StreamController<Geoposition> controller;
  controller = new StreamController<Geoposition>(
      sync: true,
      onListen: () {
        assert(watchId == null);
        watchId = _watchPosition((position) {
          controller.add(_ensurePosition(position));
        }, (error) {
          controller.addError(error);
        }, options);
      },
      onCancel: () {
        assert(watchId != null);
        _clearWatch(watchId);
      });

  return controller.stream;
}