flutter 为什么Map标记图标没有改变?

jgwigjjp  于 2023-05-08  发布在  Flutter
关注(0)|答案(1)|浏览(102)

这是我的代码

void addCustomIcon(){
    BitmapDescriptor.fromAssetImage(
      const ImageConfiguration(), "assets/camera_icon.png")
    .then(
      (icon){
        setState(() {
          markerIcon = icon;
        });
      }
    );
  }

void initState() {
  addCustomIcon();
  intilize();
  super.initState();
}
intilize(){
  Marker m1 = Marker(
    markerId: MarkerId('m1'),
    position: LatLng(1.33397173881531,  103.77531433105469),
    infoWindow: InfoWindow(title: 'Marker 1'),
    icon: markerIcon,
    );}

这是Google Maps的代码:

GoogleMap(
              initialCameraPosition: CameraPosition(target: LatLng(1, 100), zoom: 16),
              markers: markers.map((e) => e).toSet(),
              trafficEnabled: true,
              myLocationEnabled: true,
              mapType: MapType.normal,)

我试图让我的资产文件中的标记图标更改为camera_icon,但它仍然显示红色的默认标记。如何将标记图标更改为camera_icon?

w8rqjzmb

w8rqjzmb1#

嘿,我试着帮你

看起来你异步地将标记分配给了markerIcon,这在addCustomIcon()中执行,还有另一个函数名为intilize()来将addCustomIcon()的图标结果分配给Set,我猜问题是因为这个addCustomIcon()还没有完成,并且intilize()被提前调用,它没有等待addCustomIcon()完成分配过程。
然后试试这个:

List<Marker> markers = [];

void addCustomIcon() async {
  BitmapDescriptor icon = await BitmapDescriptor.fromAssetImage(
    const ImageConfiguration(),
    'assets/camera_icon.png',
  );

  setState(() {
    markers = [
      Marker(
        markerId: MarkerId('m1'),
        position: LatLng(1.33397173881531,  103.77531433105469),
        infoWindow: InfoWindow(title: 'Marker 1'),
        icon: icon,
      ),
    ];
  });
}

@override
void initState() {
  addCustomIcon();
  super.initState();
}

// ...

GoogleMap(
  initialCameraPosition: CameraPosition(target: LatLng(1, 100), zoom: 16),
  markers: markers.toSet(),
  trafficEnabled: true,
  myLocationEnabled: true,
  mapType: MapType.normal,
),

我在这里做了一些修改,将intilize()函数的内容添加到addCustomIcon()中。

相关问题