Cómo establecer un intervalo para la recepción de datos de localización aleteo

Thanooshan:

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 intervalperí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);

  });

});
Ovidiu:

De acuerdo con la documentación del paquete, intervalsó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, changeSettingses 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 awaitla llamada a changeSettings.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=303799&siteId=1
Recomendado
Clasificación