Source
@DomName('Geolocation.watchPosition')
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;
}