Как добавить и удалить маркеры в Flutter Google Maps на основе прослушивателя базы данных в реальном времени?
Я прочитал множество документов, сообщений и т. Д. И, похоже, не могу заставить вещи работать.
У меня есть прослушиватель базы данных в реальном времени, который обеспечивает координаты широты / долготы внутри FirebaseAnimatedList. Когда координаты предоставлены, я хочу разместить маркер на карте. Когда координаты не существуют, маркер должен быть удален (я не зашел так далеко в коде, я даже не могу заставить маркеры отображаться).
Я создаю маркеры и контроллер следующим образом:
Set<Marker> markers = Set();
final Completer<GoogleMapController> _controller = Completer();
У меня есть следующий код внутри FirebaseAnimatedList для создания маркера:
Marker userMarker;
userMarker = Marker(
markerId: MarkerId(id),
position: LatLng(
lat, lon),
);
markers.add(userMarker);
И я вызываю GoogleMap внутри виджета сборки следующим образом:
GoogleMap(
mapType: MapType.normal,
myLocationEnabled: true,
myLocationButtonEnabled: true,
compassEnabled: true,
initialCameraPosition: _kGooglePlex,
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
markers: markers,
),
Когда слушатель выбирает координаты, маркер не добавляется. Если у слушателя уже есть координаты при создании карты, маркер по-прежнему не добавляется. Как я могу получить маркер, который будет добавлен и удален в зависимости от слушателя?
1 ответ
Виджет GoogleMap отображает карту и маркеры во время сборки. Если в вашем списке маркеров есть изменения, вам нужно будет перестроить виджет. Один из подходов, который вы можете использовать для хранения своих маркеров, заключается в использовании Map
Map<MarkerId, Marker> markers = <MarkerId, Marker>{};
...и звоню
setState()
для сохранения изменений на карте и для перестроения виджета GoogleMap.
setState(() {
markers[markerId] = marker;
});
Затем установите маркеры на
GoogleMap.markers()
GoogleMap(
...
markers: markers.values.toSet(),
)
Вы можете проверить этот полный образец , предоставленный плагином google_maps_flutter , в качестве руководства.