以下代码显示,在一个 flutter 小部件中,我使用了
location.onLocationChanged
侦听器,以便我可以在人移动时记录一些点,然后将它们作为路径显示在地图上。但当我进入同一页面时它就无法工作,它开始连续调用。即使我不动。
@override
void initState() {
_progressHUD = new ProgressHUD(
backgroundColor: Colors.black12,
color: Colors.red,
containerColor: Colors.white,
borderRadius: 5.0,
loading: false,
text: 'Updating...',
);
setState(() {
isEnding = false;
});
checkLocation();
getCurrentRide();
location.changeSettings(accuracy: LocationAccuracy.high);
locationSubscription =
location.onLocationChanged.listen((LocationData currentLocation) {
// Use current location
if (currentRideId != null && !isEnding) {
final collRef = Firestore.instance.collection('rideLocations');
DocumentReference docReference = collRef.document();
docReference.setData({
"lat": currentLocation.latitude,
"long": currentLocation.longitude,
"time": new DateTime.now(),
"locationId": docReference.documentID,
"rideId": currentRideId,
}).then((doc) {
Timer(Duration(milliseconds: 150), () {
print("init location timer");
// Navigator.pop(context, true);
});
}).catchError((error) {
print(error);
});
}
print(
"currentLocation is --------------- ${currentLocation.latitude}${currentLocation.longitude}");
print("ongoing ref $currentRideId");
});
super.initState();
}
您有一些请求选项来获取位置的准确性和频率。
Accuracy
、Interval
、Distance
但是你只是告诉了库的准确性。间隔和距离作为默认值传递
location.changeSettings(accuracy: LocationAccuracy.high);
需要将这些参数告知您的场景的库。 只是一个例子,
location.changeSettings(accuracy: LocationAccuracy.high.
interval: 10000,
distanceFilter: 5
);
这基本上意味着,
如果 10 秒过去了并且*如果手机移动了至少 5 米,请给出位置。
AND*,在 Android 上,interval 和 distanceFilter 一起解释。所以,只需 10 秒或仅几分钟。 5m移动不会触发
onLocationChanged
方法
首先,即使你不动,也可能会有一些漂移,所以位置会发生一点点变化。
其次,尝试
distinct
,例如:
ocation.onLocationChanged
.distinct()
.listen((LocationData currentLocation) { ... });
你只需输入单行代码 我正在使用这个插件 ->https://pub.dev/packages/location
//interval add secode in milisecond and add distance
location.changeSettings(interval: 5000,distanceFilter: 5);
我只需添加 .distinct 即可解决问题