getPositionStream method
Stream<DevicePosition>
getPositionStream({
- DeviceLocationSettings? deviceLocationSettings,
override
Implementation
@override
Stream<DevicePosition> getPositionStream({
DeviceLocationSettings? deviceLocationSettings,
}) {
final controller = StreamController<DevicePosition>.broadcast();
int? watchId;
DevicePosition? previous;
final settings = deviceLocationSettings ?? const DeviceLocationSettings();
final distanceFilter = settings.distanceFilter;
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(settings.accuracy),
timeout: settings.timeLimit,
maximumAge: settings is WebSettings ? settings.maximumAge : null,
);
controller.onListen = () {
watchId = _geolocation.watchPosition(
onSuccess.toJS,
onError.toJS,
options,
);
};
controller.onCancel = () {
if (watchId != null) {
_geolocation.clearWatch(watchId!);
}
};
return controller.stream;
}