代码之家  ›  专栏  ›  技术社区  ›  El Hombre Sin Nombre

颤振-阻力标记并获得新位置

  •  0
  • El Hombre Sin Nombre  · 技术社区  · 6 年前

    在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如何得到新的经纬度?

    0 回复  |  直到 6 年前
        1
  •  2
  •   dcg    6 年前

    如果你允许的话,我建议你用不同的方法来解决这个问题。我认为在当前版本的google maps for 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));
        });
      }
    

    希望有帮助!

        2
  •  1
  •   MSARKrish    5 年前

    标记有 昂德拉根德 财产。使用 昂德拉根德 新的财产 纬度 经度 是的。

    Marker(
              onTap: () {
                print('Tapped');
              },
              draggable: true,
              markerId: MarkerId('Marker'),
              position: LatLng(value.latitude, value.longitude),
              onDragEnd: ((value) {
                print(value.latitude);
                print(value.longitude);
              }))
    
    推荐文章