如何删除我所有的标记并添加新的 onPress?

How to remove all my markers and add new ones onPress?

我想显示轨迹标记并更改为事件标记并在按下按钮时返回。 当我清除标记时,大小为 0,但它们不会从地图中删除。 所以当我添加新的时,没有任何反应。

我的初始化状态

@override
void initState() {
    super.initState();
    _listToMarkersTrails();
    isTrailsMode = true;
    message = "Go to Events";
}

我的地图在堆栈中

Stack(
    children: <Widget>[
      map,
      Positioned(top: 5, right: 5, child: _getButton())
    ],
  ),

我的 _getbutton() 方法

RaisedButton _getButton() {
    if (isTrailsMode) {
      return RaisedButton(
        color: Colors.green,
        onPressed: () => _changeMarkers(),
        child: Text("Change to Events"),
      );
    } else {
      return RaisedButton(
        color: Colors.blue,
        onPressed: () => _changeMarkers(),
        child: Text("Change to Trails"),
      );
    }
  }

我的 _changeMarkers() 方法

void _changeMarkers() {
    setState(() => map.markers.clear());
    if (isTrailsMode) _listToMarkersTrails();
    else _listToMarkersEvents();
    setState(() => isTrailsMode = !isTrailsMode);
  }

我的 listToMarkers- 方法

void _listToMarkersTrails() {
  for (var i = 0; i < widget.trailList.length; i++) {
    setState(() {
  map.markers.add(Marker(
    icon: BitmapDescriptor.defaultMarkerWithHue(50.0),
    infoWindow: InfoWindow(
        title: widget.trailList[i].trailName,
        onTap: () => _navigateToTrail(widget.trailList[i])),
    markerId: MarkerId("id{$i}_trails"),
    position: widget.trailList[i].markers[0].position,
  ));
  });
}  
}

void _listToMarkersEvents() {
for (var i = 0; i < widget.eventList.length; i++) {
  setState(() {
    map.markers.add(Marker(
      icon: BitmapDescriptor.defaultMarkerWithHue(150.0),
      infoWindow: InfoWindow(
          title: widget.eventList[i].date,
          onTap: () => _navigateToEvent(widget.eventList[i])),
      markerId: MarkerId("id{$i}_events"),
      position: widget.eventList[i].trail.markers[0].position,
    ));
  });
}
}

当我检查这些值时,在清除之后,markers.lenght = 0,但是没有从地图中的标记中删除任何内容。 我应该添加什么?控制器?

提前致谢!

编辑 忘了补充,这是Flutter(dart)

您不需要控制器。 GoogleMap 包在版本 0.3.0 中发生了变化,标记现在是小部件,GoogleMap 小部件在其标记 属性.

中使用了一组标记

您需要做的是,在您的状态下设置一组标记,将该组提供给 GoogleMap 小部件的标记 属性,然后调用 setState 来改变该组。

这将使框架安排重建,因此您的 GoogleMap 将使用新的标记集重新构建。检查我在这个 post 中的答案以查看代码:

注意:根据此元 post

我已经 post 编辑了我的评论作为答案