getPositionStream method
Implementation
@override
Stream<Position> getPositionStream({LocationSettings? locationSettings}) {
final controller = StreamController<Position>.broadcast();
int? watchId;
Position? previous;
final distanceFilter = locationSettings?.distanceFilter ?? 0;
void onSuccess(web.GeolocationPosition pos) {
final next = _positionFromGeoposition(pos);
if (distanceFilter > 0 && previous != null) {
final d = distanceBetween(
previous!.latitude,
previous!.longitude,
next.latitude,
next.longitude,
);
if (d < distanceFilter) return;
}
previous = next;
controller.add(next);
}
void onError(web.GeolocationPositionError err) {
controller.addError(_mapError(err));
}
final options = _buildOptions(
enableHighAccuracy: _highAccuracy(locationSettings?.accuracy),
timeout: locationSettings?.timeLimit,
maximumAge: locationSettings is WebSettings
? locationSettings.maximumAge
: null,
);
controller.onListen = () {
watchId = _geolocation.watchPosition(
onSuccess.toJS,
onError.toJS,
options,
);
};
controller.onCancel = () {
if (watchId != null) {
_geolocation.clearWatch(watchId!);
}
};
return controller.stream;
}