【问题标题】:How to set an interval to the flutter location receiving data如何设置颤振位置接收数据的间隔
【发布时间】:2020-03-11 02:10:33
【问题描述】:

我一直在尝试使用Location package 通过onLocationChanged() 方法获取位置数据。而我也成功了。但问题是我需要减慢/延迟从包裹接收的位置数据。我增加了interval 期间,但是,它没有工作。

我需要放慢数据接收速度,这样应用才能流畅运行,否则会卡顿。

这是我遵循的代码sn-p,

  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】:

    根据包的文档,interval 仅适用于 Android,因此您应该为更新地图的频率设计自己的逻辑,例如使用 Timer.periodic

    另外,changeSettingsFuture,因此您当前的代码可能会在应用设置之前开始侦听位置更改。你应该await 打电话给changeSettings

    【讨论】:

    • 嗨@Ovidiu 很高兴您回答了这个问题。我根据您的建议使用Timer.periodic 更新了代码。但是地图滞后太多了。我用新代码更新了问题。你能看一下吗?
    • 那是错误的使用方式。您现在在每次位置更新时创建一个新计时器,它们也是周期性的,这意味着它们会自行重置,因此您比以前更频繁地调用回调...我的意思是使用您在 @987654328 中实例化的单个周期性计时器@,并在回调中请求位置(仅一次,而不是位置更新流),并在获取新位置时为相机设置动画。
    猜你喜欢
    • 1970-01-01
    • 2021-04-21
    • 2019-05-19
    • 1970-01-01
    • 2021-12-13
    • 2020-11-20
    • 1970-01-01
    • 2018-10-18
    • 2020-11-02
    相关资源
    最近更新 更多