Я пытался получить данные о местоположении с помощью метода onLocationChanged()
, используя Пакет местоположений . И я тоже добился успеха. Но проблема в том, что мне нужно замедлить / задержать данные о местоположении, полученные из пакета. Я увеличил период 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);
});
});