Флаттер: как очистить полилинии от Google Maps - PullRequest
1 голос
/ 25 февраля 2020

Я создал виджет Google Maps с маркерами и полилиниями с кодом ниже.

Все работает нормально, за исключением того, что когда я рисую полилинию между двумя координатами, а затем пытаюсь удалить ее, полилиния не не удаляются (по крайней мере, не навсегда). Когда я использую методы ниже, чтобы попытаться удалить старую полилинию и добавить новую, я получаю две полилинии:

_polyLine.clear()
_polyLine.remove("id")
polylines.removeWhere((m) => m.polylineId.value == 'polyId$_randPolyId')

Она удаляется, а затем снова добавляется в дополнение к новой. Это приводит к изображению ниже:

The Results ...

void showPinsOnMap() {        
      // _polylines.removeWhere(
      // (m) => m.polylineId.value == 'polyId$_randPolyId');
      // _polylines.clear()
      _polylines = {};
      print("\n\n\nPolyLines Lenght: ${_polylines.length}\n\n\n");

   var pinPosition = LatLng(_currentLocation.latitude,_currentLocation.longitude);

   var destPosition = LatLng(_destinationLocation.latitude,
   _destinationLocation.longitude);
   _markers.add(Marker(
      markerId: MarkerId('sourcePin'),
      position: pinPosition,
      icon: _sourceIcon
   ));
   _markers.add(Marker(
      markerId: MarkerId('destPin'),
      position: destPosition,
      icon: _destinationIcon,
   ));

   setPolylines();
   notifyListeners();
}

...

...
void setPolylines() async {
   List<PointLatLng> result = await _polylinePoints.getRouteBetweenCoordinates(
   _googleAPIKey,
   _currentLocation.latitude,
   _currentLocation.longitude,
   _destinationLocation.latitude,
   _destinationLocation.longitude).catchError((onError){
     print("\n\n\n An Error Occured Possibly dure to network issues\n\n\n");
   });

  if(result != null){
    print("Results not null");
   if(result.isNotEmpty){
      result.forEach((PointLatLng point){
         _polylineCoordinates.add(
            LatLng(point.latitude,point.longitude)
         );
      });
       _isLoadingData = false;
      _polylines.add(Polyline(
        width: 5, 
        polylineId: PolylineId('polyId$_randPolyId'),
        color:
        Color.fromARGB(255, 40, 122, 198), 
        points: _polylineCoordinates
        ));
  }
  }
  notifyListeners();
}
...

1 Ответ

1 голос
/ 04 марта 2020

вам нужно очистить polylineCoordinates перед построением новых путей.

polylineCoordinates.clear (); // вызываем это перед проверкой значения результата.

polylineCoordinates.clear();
    if(result != null){
    print("Results not null");
   if(result.isNotEmpty){
      result.forEach((PointLatLng point){
         _polylineCoordinates.add(
            LatLng(point.latitude,point.longitude)
         );
      });

  }
}
...