Flutter - 从谷歌地图小部件中删除标记

Posted

技术标签:

【中文标题】Flutter - 从谷歌地图小部件中删除标记【英文标题】:Flutter - Removing markers from Google Maps Widget 【发布时间】:2021-07-31 18:46:51 【问题描述】:

我正在构建一个颤振应用程序并使用 BLoC 进行状态管理,用户可以在其中选择相机的当前位置,单击“确认”,然后会在该位置添加一个名为“dep”的标记(出发),然后他将能够添加另一个名为“dest”(目的地)的标记。 用户还可以点击“返回”并恢复到以前的状态,这意味着 id 必须删除他使用的最后一个标记。

这是我的谷歌地图小部件:

GoogleMap(
  zoomControlsEnabled: false,
  zoomGesturesEnabled: true,
  myLocationEnabled: false,
  mapType: MapType.normal,
  initialCameraPosition: state.cameraPosition,
  markers: mapBloc.markers,
  onMapCreated: _onMapCreated,
  onCameraMove: _onCameraMove,
),

这是我用来删除标记的代码(根据当前状态,markerID 将是“dep”或“dest”):

void removeMarker(String markerID) 
    markers.remove(markers.firstWhere((Marker marker) => marker.markerId.value == markerID));

此屏幕截图来自将“dep”和“dest”都添加到地图后设置的标记:

此屏幕截图来自从地图中删除“dep”和“dest”后设置的标记:

问题是,当我删除两个标记时,第二个(dest)从地图中成功删除(在执行地图更新功能后),但第一个(dep)没有被删除,它只会当我尝试“添加”一个新的“dep”位置时更新,然后“dep”标记会将其位置更新为新位置。

【问题讨论】:

【参考方案1】:

我想通了,事情是,一切都运行良好,但是,地图没有被重建,因为当我产生负责地图更新的状态时,它没有被发送,因为 Equatable 会停止多次发送相同的状态,所以我只是从我的 MapState 中删除了 Equatable,因为我不需要它,现在一切正常!

【讨论】:

以上是关于Flutter - 从谷歌地图小部件中删除标记的主要内容,如果未能解决你的问题,请参考以下文章

从谷歌地图中删除标记集群[不仅仅是标记]

从谷歌地图iOS中删除标记

如何从谷歌地图位置标记(iOS)中删除箭头?

Flutter从谷歌地图获取坐标

如何从谷歌地图中删除特定的多个标记而不是单个或所有标记

如何从谷歌地图v2 android中的标记获取屏幕坐标