Как установить интервал к месту получения флаттера - PullRequest
0 голосов
/ 11 марта 2020

Я пытался получить данные о местоположении с помощью метода 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);

  });

});

1 Ответ

2 голосов
/ 15 марта 2020

Согласно документации пакета, interval работает только на Android, поэтому вы должны создать свой собственный лог c для определения частоты обновления карты, например, используя Timer.periodic.

. Кроме того, changeSettings - это Future, поэтому ваш текущий код, вероятно, начнет прослушивать изменения местоположения до применения настроек. Вы должны await позвонить на changeSettings.

...