我一直在尝试使用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);
});
});
根据软件包的文档,interval
仅在Android上有效,因此您应该设计自己的逻辑来确定地图的更新频率,例如使用Timer.periodic
。
此外,changeSettings
是Future
,因此您的当前代码可能会在应用设置之前开始侦听位置更改。您应该将await
呼叫到changeSettings
。