Google Maps for Flutter-拖动后获取标记的新位置

时间:2019-01-02 07:14:57

标签: google-maps dart flutter marker

我想使用Google Google Maps for Flutter及其标记在扑朔迷离中创建位置选择器。通过创建可拖动选项设置为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的{​​{1}}属性来获取标记的新位置,但是它返回了标记的初始位置。

MapController

我在这里做错了什么,还是有另一种方法来完成此用例?谢谢。

3 个答案:

答案 0 :(得分:1)

该软件包是开发人员预览的版本0.0.3。直到达到1.0,才考虑将其用于生产工作。同时,您可能会提出问题,以将具体的优先事项告知颤振团队。

答案 1 :(得分:1)

我解决此问题的方法是使用相机位置移动标记,然后使用当前相机位置获取新坐标。您需要重构一些代码,以使用Google Maps 0.4版中出现的最新变化来扑朔迷离,其中包括您需要添加到代码中的该回调:

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));
    });
  }

告诉我它是否有效!

答案 2 :(得分:0)

我通过添加侦听器和少量条件来解决此问题

  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实例。