Flutter - перетащите маркер и получите новую позицию - PullRequest
0 голосов
/ 05 марта 2019

В Flutter у меня есть карта, которая принимает положение устройства с помощью location .Затем я использую эту позицию для отображения маркера на карте Google с помощью Google Maps Flutter плагин.

Код похож на

 child: GoogleMap(
        mapType: MapType.hybrid,
        initialCameraPosition: CameraPosition(
          target: LatLng(lat, lng),
          zoom: 5,
        ),
        markers: Set<Marker>.of(
          <Marker>[
            Marker(
              draggable: true,
              markerId: MarkerId("1"),
              position: LatLng(lat, lng),
              icon: BitmapDescriptor.defaultMarker,
              infoWindow: const InfoWindow(
                title: 'Usted está aquí',
              ),
            )
          ],
        ),
        onMapCreated: (GoogleMapController controller) {
          mapController = controller;
        },
      ))

Если плагин местоположения не работает илипринять неправильные данные, мне нужно иметь возможность переместить этот маркер.Я использую draggable: true для перетаскивания маркера, но мне нужно взять новую широту и долготу для сохранения его в базе данных.

Итак, вопрос в том, как использовать перетаскиваемый как получитьновая широта и долгота?

1 Ответ

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

Если вы позволите мне, я бы предложил вам другой подход к этой проблеме.Я думаю, что в текущей версии карт Google для Flutter (0.4.0) у вас нет способа получить новую позицию после перетаскивания маркера, поэтому я решил использовать положение камеры для перемещения маркера, а затем использоватьтекущее положение камеры, чтобы получить новые координаты.Таким образом, в вашем коде вы можете сделать что-то вроде этого:

    child: GoogleMap(
        mapType: MapType.hybrid,
        initialCameraPosition: CameraPosition(
          target: LatLng(lat, lng),
          zoom: 5,
        ),
        markers: Set<Marker>.of(
          <Marker>[
            Marker(
              draggable: true,
              markerId: MarkerId("1"),
              position: LatLng(lat, lng),
              icon: BitmapDescriptor.defaultMarker,
              infoWindow: const InfoWindow(
                title: 'Usted está aquí',
              ),
            )
          ],
        ),
        onCameraMove: ((_position) => _updateMarker(_position)),            
        onMapCreated: (GoogleMapController controller) {
          mapController = controller;
        },
      ))

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

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

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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...