如何使用 BitmapDescriptor.fromAssetImage() 设置自定义 Marker 图标?

How to use BitmapDescriptor.fromAssetImage() to set a custom Marker icon?

我正在尝试在我的 Flutter 应用中为我的地图标记设置一个自定义图标。由于 BitmapDescriptor.fromAsset() 已被弃用,我正在努力寻找如何使用 BitmapDescriptor.fromAssetImage().

我没有找到任何关于此的文档或 Whosebug 问题。

这是我当前创建它的方式(没有自定义图像):

Marker(
          markerId: MarkerId(pos.toString()),
          position: pos,
          infoWindow: InfoWindow(
            title: store['store_name'],
            snippet: '',
          ),
          icon: BitmapDescriptor.defaultMarker));

在Class中定义一个字段:

BitmapDescriptor myIcon;

在地图准备好之前检索图标。

@override
void initState() {
    BitmapDescriptor.fromAssetImage(
        ImageConfiguration(size: Size(48, 48)), 'assets/my_icon.png')
        .then((onValue) {
      myIcon = onValue;
    });
 }

设置图标:

icon: myIcon;

请确保您已在 pubspec.yaml

的 Flutter 部分设置图标
 assets:
    - assets/my_icon.png

更好的解决方案是将 GoogleMap 小部件包装在 FutureBuilder 中。 在单独的 Future 中生成你的标记,并分配 future 的结果 到 GoogleMap 小部件中的标记

未来建设者:

FutureBuilder(
  future: generateMarkers(positions),
  initialData: Set.of(<Marker>[]),
  builder: (context, snapshot) => GoogleMap(        
    initialCameraPosition: CameraPosition(target: LatLng(0, 0)),
    markers: snapshot.data,
  ),
);

标记生成器:

Future<Set<Marker>> generateMarkers(List<LatLng> positions) async {
List<Marker> markers = <Marker>[];
for (final location in positions) {    
  final icon = await BitmapDescriptor.fromAssetImage(
      ImageConfiguration(size: Size(24, 24)), 'assets/my_icon.png');

  final marker = Marker(
    markerId: MarkerId(location.toString()),
    position: LatLng(location.latitude, location.longitude),
    icon: icon,
  );

  markers.add(marker);
}

return markers.toSet();

}

您可以像这样使用它:

Marker marker = Marker(
        icon: await BitmapDescriptor.fromAssetImage(
            ImageConfiguration(size: Size(48, 48)), 'assets/images/pin.png'
        )
    );