Mapbox Flutter更新PolylineAnnotation报错,求检查活跃状态方法
问题分析与解决
核心问题
你每次更新注解时都调用createPolylineAnnotationManager()创建新的注解管理器,而你要更新的PolylineAnnotation属于之前创建的管理器实例,新管理器中不存在该注解,因此触发"不是活跃注解"的错误。
检查注解是否活跃的方法
通过持有注解管理器实例,调用其getAnnotationById(id)方法判断:
- 返回非
null,说明该注解是当前管理器中的活跃注解 - 返回
null,说明注解已被移除或不属于当前管理器
修正后的代码实现
- 在类中声明全局的注解管理器变量:
PolylineAnnotationManager? _polylineManager;
- 在地图初始化完成的回调中(比如
onMapCreated)创建一次管理器并保存:
void onMapCreated(MapboxMapController controller) { _mapboxMapController = controller; // 仅初始化创建一次注解管理器 _mapboxMapController.annotations.createPolylineAnnotationManager().then((manager) { _polylineManager = manager; // 在此处初始化添加你的PolylineAnnotation }); }
- 更新注解时复用已有的管理器:
if (_polylineManager != null) { // 先检查目标注解是否处于活跃状态 final existingAnnotation = _polylineManager!.getAnnotationById(nearestLine.id); if (existingAnnotation != null) { final updatedAnnotation = PolylineAnnotation( id: nearestLine.id, lineColor: selectedRadioColor, lineWidth: nearestLine.lineWidth, geometry: nearestLine.geometry, ); _polylineManager!.update(updatedAnnotation); } else { // 注解已非活跃,可根据需求选择重新添加或其他处理逻辑 } }
额外注意事项
- 同一类型的注解(Polyline、Marker等)应对应唯一的全局管理器实例,避免重复创建
- 使用管理器的
delete方法移除注解后,该注解会变为非活跃状态,无法再执行更新操作
内容的提问来源于stack exchange,提问作者Indrajeet Singh
相关产品推荐
相关产品推荐

