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

Flutter中google_maps_flutter加载大量位置及缩放时触发空指针异常

解决google_maps_flutter大量标记/缩放时的NullPointerException问题

可行修复方案

1. 分批加载标记点

避免一次性加载所有位置点,根据地图可视区域动态加载:

  • 监听GoogleMapController的onCameraMove事件,获取当前可视范围
  • 仅加载可视范围内的标记点,超出范围的暂时移除
  • 示例代码:
GoogleMap(
  onCameraMove: (CameraPosition position) async {
    final bounds = await controller.getVisibleRegion();
    final visibleMarkers = allMarkers.where((marker) {
      return bounds.contains(marker.position);
    }).toList();
    setState(() {
      markers = Set<Marker>.from(visibleMarkers);
    });
  },
  markers: markers,
  // 其他地图配置
)

2. 同步升级相关依赖版本

  • 在pubspec.yaml中使用google_maps_flutter的最新稳定版
  • 同步升级Android端Google Maps SDK版本(修改android/build.gradle):
dependencies {
    implementation 'com.google.android.gms:play-services-maps:18.2.0' // 替换为最新兼容版本
}

3. 优化自定义Marker资源

  • 避免使用过大的自定义图标,优先选择矢量图或压缩后的图片资源
  • 检查图标资源路径,确保在所有设备上能正确加载,避免空引用

4. 临时禁用硬件加速

在AndroidManifest.xml中对地图所在Activity禁用硬件加速,缓解GL线程异常:

<activity
    android:name=".MainActivity"
    android:hardwareAccelerated="false">
    <!-- 其他Activity配置 -->
</activity>

5. 使用标记聚合库

当标记点数量极多时,用flutter_map_marker_cluster等库实现标记聚合:

  • 将近距离标记点合并为集群,缩放时再展开
  • 减少单帧渲染的标记数量,降低GL线程负载

错误日志详情

FATAL EXCEPTION: GLThread 247496
Process: com.jio.jcpapps, PID: 31625
java.lang.NullPointerException: Attempt to get length of null array
at java.nio.ByteBufferAsIntBuffer.put(ByteBufferAsIntBuffer.java:122)
at com.google.maps.api.android.lib6.gmm6.vector.gl.buffer.n.i(:com.google.android.gms.dynamite_mapsdynamite@232414037@23.24.14 (150400-0):2)
at com.google.maps.api.android.lib6.gmm6.vector.gl.buffer.n.d(:com.google.android.gms.dynamite_mapsdynamite@232414037@23.24.14 (150400-0):3)
at com.google.maps.api.android.lib6.gmm6.vector.gl.drawable.ai.s(:com.google.android.gms.dynamite_mapsdynamite@232414037@23.24.14 (150400-0):30)
at com.google.maps.api.android.lib6.gmm6.vector.gl.drawable.ao.s(:com.google.android.gms.dynamite_mapsdynamite@232414037@23.24.14 (150400-0):10)
at com.google.maps.api.android.lib6.gmm6.vector.bx.s(:com.google.android.gms.dynamite_mapsdynamite@232414037@23.24.14 (150400-0):29)
at com.google.maps.api.android.lib6.gmm6.vector.bq.b(:com.google.android.gms.dynamite_mapsdynamite@232414037@23.24.14 (150400-0):157)
at com.google.maps.api.android.lib6.gmm6.vector.at.run(:com.google.android.gms.dynamite_mapsdynamite@232414037@23.24.14 (150400-0):48)

内容的提问来源于stack exchange,提问作者Shirsh Shukla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:35:22