Как добавить и удалить маркеры в 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 , в качестве руководства.

Другие вопросы по тегам