Включение и отключение обновления местоположения / прослушивание приложения Flutter - PullRequest
0 голосов
/ 24 апреля 2020

Я использую https://pub.dev/packages/location для отслеживания местоположения пользователя и на основе местоположения маркер размещается на карте, созданной с помощью этого плагина https://pub.dev/packages/google_maps_flutter

Я использую виджет Stack для отображения некоторых карт над картой, и при нажатии на карту они исчезают, и карта становится видимой. Проблема в том, что плагин местоположения продолжает слушать и добавляет маркер к Set(), который вызывает перезагрузку всего виджета.

Это мой код. Я планирую попробовать НЕ иметь местоположение в файле main.dart в качестве потока. Я также использую Provider.

файл main.dart

import 'package:location/location.dart';


class _MyAppState extends State<MyApp> {

var _locationService = new Location();

...
return MultiProvider(
  providers: [
    StreamProvider<LocationData>.value(
      value: _locationService.onLocationChanged(),
    ),
  ],

...

И файл map.dart, в котором я пытался только объявить _gpsLocation, если _filter имеет значение true. _filter - это boolean, что верно только при просмотре карты. Поэтому я надеюсь послушать _gpsLocation, когда карты не отображаются на экране. Я также попытался установить listen: на основе _filter, но карты все еще мерцают.

Не уверен, как заставить это работать.

@override
Widget build(BuildContext context) {
print("Widget build(BuildContext context)");

if (_filter) {
  print("_filter is here $_filter");
  final LocationData _gpsLocation =
      Provider.of<LocationData>(context, listen: _filter);
  if (_gpsLocation != null) {
    _increment = _increment + 1;

    _markers.add(
      Marker(
        markerId: MarkerId("Your Location"),
        position: LatLng(_gpsLocation.latitude, _gpsLocation.longitude),
        onTap: () => {},
      ),
    );
  }
}
...