Как убрать все мои маркеры и добавить новые на Press? - PullRequest
0 голосов
/ 06 мая 2019

Я хочу показать маркеры следов и изменить их на маркеры событий и обратно при нажатии кнопки. Когда я очищаю маркеры, размер равен 0, но они не удаляются с карты. Поэтому, когда я добавляю новые, ничего не происходит.

Мой initState

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

Мой список ToMarkers - методы

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, но ничего не удаляется из маркеров на карте. Что я должен добавить? Контроллер?

Заранее спасибо!

EDIT Я забыл добавить, это Флаттер (дротик).

1 Ответ

0 голосов
/ 06 мая 2019

Вам не нужен контроллер. Пакет GoogleMap изменился в версии 0.3.0 , маркеры теперь являются виджетом, а виджет GoogleMap принимает набор маркеров в свойстве маркеров.

Что вам нужно сделать, так это установить набор маркеров в своем состоянии, присвоить этому свойству свойство маркеров виджета GoogleMap, а затем вызвать setState, чтобы изменить этот набор.

Это сделает расписание фреймворка перестроенным, поэтому ваша GoogleMap будет построена заново с новым набором маркеров. Проверьте мой ответ в этом сообщении, чтобы увидеть код: Динамическое добавление маркеров для флаттера Google Map

Примечание: я разместил свой комментарий в качестве ответа, согласно этому мета post .

...