编辑:发现我的问题与开放Github问题有关https://github.com/flutter/flutter/issues/41731
因此,目前我只需要帮助,弄清楚如何将我的标记显示为BitmapDescriptor,而只是简单地堆叠在我的谷歌地图小部件上作为CustomPaint
小部件
正如GitHub中所描述的,但我不知道它将如何响应并在地图上的正确位置显示标记
它看起来像这样:
Stack(
children: [
MyMarkersDisplayingAtTheRightCoordinates(),
GoogleMap(...)
],
);
在谷歌地图小部件顶部显示标记作为CustomPaint小部件是非常昂贵的,因为两个主要原因-
-
Google地图UI是一个平台原生视图。它不提供当前选定的可见屏幕LatLngBounds,Zoom级别作为数据流。这是计算标记位置以使其具有响应性所必需的。
-
根据当前选择的谷歌地图投影来计算标记位置将是一项开发和计算成本高昂的工作。随后,基于谷歌地图投影变化构建标记小部件。
有两种方法可以将标记添加到谷歌地图,
- 您可以将图像传递给BitmapDiscriptor-
BitmapDescriptor.fromAssetImage(ImageConfiguration.empty, 'map_marker.png');
如果您想显示多个标记,这是一种最佳且推荐的方式https://github.com/flutter/flutter/issues/41731#issuecomment-538370982.
- 您也可以将图像数据的Uint8List格式传递给BitmatpDiscriptor。如果您想将小部件显示为标记,那么您也可以使用屏幕截图包来计算flutter小部件的Uint8List。这里是一个例子
果您不想使用屏幕截图软件包。然后,您也可以为custom_markers创建const Uint8List变量。ScreenshotController screenshotController = ScreenshotController(); late Future<Uint8List> marker;