Google Maps Flutter无法在iOS上正确显示多边形

chhqkbe1  于 2023-05-30  发布在  Flutter
关注(0)|答案(1)|浏览(230)

我使用google_maps_flutter在googleMap上显示多边形。每次用户点击Map时,一个点就会被添加到一个点列表中,然后输入到我创建多边形的方法中。我也有一个删除按钮,清除我的点列表,因此我的多边形的基础上,这些点清除以及(只有在ANDROID)。
下面是我认为与问题相关的代码片段:

List<LatLng> polygonCoords = [LatLng(0, 0), LatLng(0, 0)]; // this list holds the points that  // form my polygon

void _setCoords(latlong) {  // latlong are the coordinats received from the user tap on the map
    setState(() {
      LatLng coords = latlong;
      if (polygonCoords.lastIndexOf(zero) == 1) {  // where zero = LatLng(0,0)
        polygonCoords.removeWhere((element) => element == zero);
        polygonCoords.add(coords);
        polygonCoords.add(coords); // first coordinate is added twice because the polygon needs // to loop back to the first point to close
      } else {
        polygonCoords.removeLast();
        polygonCoords.add(coords);
      }
    });
  }

Set<Polygon> myPolygon() {
    Set<Polygon> polygonSet = new Set();
    polygonSet.add(Polygon(
      fillColor: Colors.white,
      polygonId: PolygonId('polygonId'),
      points: polygonCoords,
      strokeWidth: 3,
      strokeColor: Colors.white,
    ));
    return polygonSet;
  }

GoogleMap(
   polygons: myPolygon(), // here I give the polygon set to my map
   mapType: MapType.satellite,
   initialCameraPosition: CameraPosition(
                      target: snapshot.data,
                      zoom: 16.0,
                    ),
   onMapCreated: _onMapCreated,
   onTap: (latlong) {
      _setCoords(latlong); // calling the method above to add the coordinates to my list
   },
);

void deleteSelection() {
    setState(() {
      polygonCoords.clear();
      polygonCoords.add(zero);
      polygonCoords.add(zero);
    });
  }

在iOS上发生的情况如下:我在Map上加了四个点。我按下删除按钮,什么也没有发生(我检查了日志,列表确实清除了)。我在Map上放了另一个点,前面的多边形仍然显示,然后我再加一个点,没有任何变化。当我添加第三个点时,旧的多边形消失,新的多边形在我的UI中渲染。
我试着在deleteSelection()方法中调用myPolygon(),我试着在方法外声明集合,我试着清除集合。没有任何变化,在Android上它按预期工作,但在iOS上,即使我检查了多边形确实有新的坐标,它仍然不会显示它,直到有3个点。
我现在有一个解决方案,那就是当我的集合中的点少于3个时,将多边形的可见属性设置为false(visible: polygonCoords.length < 3 ? false : true),但我想知道为什么上面的方法在iOS上不起作用,为什么在Android上它会显示创建一条线的前2个点。
使用google_maps_flutter:1.1.0版本

r8xiu3jd

r8xiu3jd1#

我用一些逻辑来处理它。
如果您的latlng点列表大小小于3,然后使折线,否则添加点列表中的多边形。
在谷歌Map中添加折线和多边形。GoogleMap(多边形:_con!.polygons,polylines:_con!.polylines,)

相关问题