如何为接收数据的颤动位置设置间隔

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

我一直在尝试使用onLocationChanged()通过Location package方法获取位置数据。我也成功了。但是问题是我需要slow / delay从包中接收到的位置数据。我增加了interval期间,但没有用。

我需要降低数据接收速度,以便应用程序能够平稳运行,否则会滞后。

这是我遵循的代码段,

  Location location = new Location();
  StreamSubscription _locationSubscription;

  void initState() { 
    super.initState();
    _animateToUser();
  }

  @override
  void dispose() { 
    if (_locationSubscription != null) {
      _locationSubscription.cancel();
    }    
    super.dispose();
  }

  Widget build(BuildContext context) {
    return Stack(
      children: <Widget>[
        GoogleMap(
          initialCameraPosition: CameraPosition(
            target: LatLng(6.854399, 79.865463),
            zoom: 14.44,
          ),
          myLocationEnabled: true,
          onMapCreated: _onMapCreated,
        ),        
      ],
    );
  }

  _onMapCreated(GoogleMapController controller) {
    setState(() {
      mapController = controller;
    });
  }

  _animateToUser() async {

    location.changeSettings(interval: 3000, distanceFilter: 10.0);
    _locationSubscription = location.onLocationChanged().listen((newData) {

      print(newData.latitude);

      mapController.animateCamera(
        CameraUpdate.newCameraPosition(
          CameraPosition(
            target: LatLng(newData.latitude, newData.longitude), 
            zoom: 17.0
          )
        )
      );

    });

  }

我认为我定义changeSettings()的方式可能是错误的。

location.changeSettings(interval: 3000, distanceFilter: 10.0);

我的方法是正确的,或者还有其他方法吗?

任何帮助将不胜感激。

更新

_locationSubscription = location.onLocationChanged().listen((newData) {

  const oneSec = const Duration(seconds: 5);
  new Timer.periodic(oneSec, (Timer t) {

    print(newData.latitude);

    mapController.animateCamera(
      CameraUpdate.newCameraPosition(
        CameraPosition(
          target: LatLng(newData.latitude, newData.longitude), 
          zoom: 17.0
        )
      )
    );

    updateToDb(newData);

  });

});
android ios flutter dart location
1个回答
0
投票

根据软件包的文档,interval仅在Android上有效,因此您应该设计自己的逻辑来确定地图的更新频率,例如使用Timer.periodic

此外,changeSettingsFuture,因此您的当前代码可能会在应用设置之前开始侦听位置更改。您应该将await呼叫到changeSettings

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