You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mapbox Flutter更新PolylineAnnotation报错,求检查活跃状态方法

问题分析与解决

核心问题

你每次更新注解时都调用createPolylineAnnotationManager()创建新的注解管理器,而你要更新的PolylineAnnotation属于之前创建的管理器实例,新管理器中不存在该注解,因此触发"不是活跃注解"的错误。

检查注解是否活跃的方法

通过持有注解管理器实例,调用其getAnnotationById(id)方法判断:

  • 返回非null,说明该注解是当前管理器中的活跃注解
  • 返回null,说明注解已被移除或不属于当前管理器

修正后的代码实现

  1. 在类中声明全局的注解管理器变量:
PolylineAnnotationManager? _polylineManager;
  1. 在地图初始化完成的回调中(比如onMapCreated)创建一次管理器并保存:
void onMapCreated(MapboxMapController controller) {
  _mapboxMapController = controller;
  // 仅初始化创建一次注解管理器
  _mapboxMapController.annotations.createPolylineAnnotationManager().then((manager) {
    _polylineManager = manager;
    // 在此处初始化添加你的PolylineAnnotation
  });
}
  1. 更新注解时复用已有的管理器:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 08:28:13