Flutter设置自定义图片为Google Map标记图标失败,代码报错求助
解决Flutter Google Map自定义标记不显示的问题
问题根源
错误日志明确指出:setState() callback argument returned a Future,核心问题是你在setState的闭包上添加了async修饰符,但Flutter要求setState的回调必须是同步执行的,不能返回Future。
修正后的代码
移除setState闭包的async修饰符即可,因为获取BitmapDescriptor的异步操作已经在setState外部完成,内部无需异步逻辑:
Future<void> addMarker( LatLng mLatLng, String mTitle, String mDescription) async { BitmapDescriptor markerbitmap = await BitmapDescriptor.fromAssetImage( ImageConfiguration(size: const Size(40, 40)), // 可指定标记大小,优化显示效果 "assets/images/icons/pin.png", ); setState(() { // 移除此处的async _markers.clear(); _markers.add(Marker( markerId: MarkerId("$mTitle${_markers.length}"), // 简化字符串拼接逻辑 position: mLatLng, infoWindow: InfoWindow( title: mTitle, snippet: mDescription, ), icon: markerbitmap )); }); }
额外检查项
pubspec.yaml配置验证
确保assets路径配置正确,示例如下:flutter: assets: - assets/images/icons/pin.png # 若需引入整个文件夹,可写为: # - assets/images/icons/配置完成后执行
flutter pub get生效。图片资源路径校验
确认图片确实存放在项目根目录的assets/images/icons/下,文件名、后缀(如.png)完全匹配,注意Android系统对路径大小写敏感。标记ID唯一性
当前代码执行_markers.clear()后添加标记,_markers.length始终为0,会导致标记ID重复。若需添加多个标记,建议使用坐标哈希值、UUID等唯一标识生成MarkerId,避免标记被覆盖。
内容的提问来源于stack exchange,提问作者SaFaL
相关产品推荐
相关产品推荐

