location.onLocationChanged 即使我根本不动时也会打电话

问题描述 投票:0回答:4

以下代码显示,在一个 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();
  }
flutter location
4个回答
3
投票

您有一些请求选项来获取位置的准确性和频率。

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
方法


0
投票

首先,即使你不动,也可能会有一些漂移,所以位置会发生一点点变化。

其次,尝试

distinct
,例如:

ocation.onLocationChanged
.distinct()
.listen((LocationData currentLocation) { ... });

0
投票

你只需输入单行代码 我正在使用这个插件 ->https://pub.dev/packages/location

//interval add secode in milisecond and add distance
location.changeSettings(interval: 5000,distanceFilter: 5);

0
投票

我只需添加 .distinct 即可解决问题

© www.soinside.com 2019 - 2024. All rights reserved.