He estado tratando de obtener los datos de localización a través de onLocationChanged()
método que utiliza la ubicación del paquete . Y tengo éxito también. Pero el problema es que necesito para frenar / retrasar los datos de localización que reciben desde el paquete. Aumenté el interval
período, pero, pero, No funcionó.
Necesito para frenar los datos de recepción de velocidad, de manera, que la aplicación se ejecutará sin problemas, de lo contrario se retraso.
Este es el fragmento de código que he seguido,
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
)
)
);
});
}
Creo que la forma I definida changeSettings()
es tal vez mal.
location.changeSettings(interval: 3000, distanceFilter: 10.0);
El enfoque de manera que es correcto o hay alguna otra manera de hacerlo?
Cualquier ayuda sería muy apreciada.
Actualizado
_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);
});
});
De acuerdo con la documentación del paquete, interval
sólo funciona en Android, por lo que debe diseñar su propia lógica de la frecuencia para actualizar el mapa, por ejemplo usando Timer.periodic
.
Además, changeSettings
es una Future
, por lo que su código actual es probable que comience a escuchar las cambios de ubicación antes de aplicar los ajustes. Usted debe await
la llamada a changeSettings
.