# 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;
    }