Я использую 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: () => {},
),
);
}
}