Google Maps for Flutter - Получить новую позицию маркера после перетаскивания - PullRequest
0 голосов
/ 02 января 2019

Я хочу создать указатель местоположения во флаттере, используя Google Карты Google для флаттера и его маркер.Можно создать перетаскиваемый маркер, создав маркер с параметром перетаскивания, установленным в значение true.Используя следующий сегмент кода.

Widget _buildMap(BuildContext context) {
  return GoogleMap(
    options: GoogleMapOptions(
      cameraPosition: CameraPosition(
        target: LatLng(7.2906, 80.6337),
        zoom: 7.0,
      ),
      compassEnabled: true,
    ),
    onMapCreated: (controller) {
      _mapController = controller;
      controller.addMarker(
        MarkerOptions(
          draggable: true,
          flat: false,
          position: LatLng(7.2906, 80.6337),
        ),
      );
    },
  );
}

Но я не могу найти способ получить новое местоположение маркера после перетаскивания маркера.Я попытался получить новое местоположение маркера, сославшись на атрибут markers атрибута MapController, но он возвращает исходное местоположение маркера.

_mapController.markers.forEach((marker) {
  print("Pos: " + marker.options.position.toString())
});

// Prints "Pos: LatLng[7.2906, 80.63369999999998]"

Что я делаю здесь неправильно или естьдругой способ выполнить этот вариант использования?Спасибо.

Ответы [ 3 ]

0 голосов
/ 13 марта 2019

Мне удалось это, добавив слушателя и несколько условий

  mapController.addListener(() async {
      final cameraCoordinates = mapController.cameraPosition.target;
      if (!mapController.isCameraMoving &&
          widget.selectedPlace.options.position !=
              mapController.cameraPosition.target) {
        mapController.updateMarker(
            widget.selectedPlace, MarkerOptions(position: cameraCoordinates));
      }
    });

Здесь mapController - это экземпляр GoogleMapController.

0 голосов
/ 18 марта 2019

Мой подход к этой проблеме состоял в том, чтобы использовать положение камеры для перемещения маркера, а затем использовать текущее положение камеры для получения новых координат.Вам нужно будет немного реорганизовать свой код, чтобы использовать последние изменения, присутствующие в версии 0.4 карт Google для флаттера, которые включают этот обратный вызов, который вам нужно будет добавить в свой код:

onCameraMove: ((_position) => _updateMarker(_position)),                        

ЗатемВы можете устанавливать новое состояние маркера каждый раз, когда пользователь перемещает камеру, и использовать эти координаты для любых других целей:

void _updatePosition(CameraPosition _position) {
    Position newMarkerPosition = Position(
        latitude: _position.target.latitude,
        longitude: _position.target.longitude);
    Marker marker = markers["your_marker"];

    setState(() {
      markers["your_marker"] = marker.copyWith(
          positionParam: LatLng(newMarkerPosition.latitude, newMarkerPosition.longitude));
    });
  }

Скажите, работает ли он!

0 голосов
/ 03 января 2019

Этот пакет является предварительным просмотром для разработчиков, версия 0.0.3. Не рассматривайте это для производственной работы, пока это не достигнет 1.0. В то же время вы можете подать проблему, чтобы сообщить команде флаттера о ваших конкретных приоритетах.

...