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