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

Flutter应用快速切换Google Maps页面时崩溃问题求助

解决Flutter中Google Maps快速切换页面时崩溃的问题

问题描述

通过底部导航栏快速切换到地图页面时,应用发生崩溃,错误日志如下:

Process: com.example.basic_setup, PID: 13613
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@223017097@22.30.17 (190400-0):2)
at com.google.maps.api.android.lib6.gmm6.vector.gl.buffer.n.d(:com.google.android.gms.dynamite_mapsdynamite@223017097@22.30.17 (190400-0):3)
at com.google.maps.api.android.lib6.gmm6.vector.gl.drawable.d.s(:com.google.android.gms.dynamite_mapsdynamite@223017097@22.30.17 (190400-0):2)
at com.google.maps.api.android.lib6.gmm6.vector.gl.drawable.ao.s(:com.google.android.gms.dynamite_mapsdynamite@223017097@22.30.17 (190400-0):12)
at com.google.maps.api.android.lib6.gmm6.vector.bz.s(:com.google.android.gms.dynamite_mapsdynamite@223017097@22.30.17 (190400-0):29)
at com.google.maps.api.android.lib6.gmm6.vector.bs.b(:com.google.android.gms.dynamite_mapsdynamite@223017097@22.30.17 (190400-0):151)
at com.google.maps.api.android.lib6.gmm6.vector.av.run(:com.google.android.gms.dynamite_mapsdynamite@223017097@22.30.17 (190400-0):48)

可能的解决方案

  • 延迟地图初始化:快速切换页面时,地图控件可能还未完全销毁就被重新创建,导致资源冲突。可以在地图页面的initState中添加短暂延迟再初始化地图:

    @override
    void initState() {
      super.initState();
      Future.delayed(const Duration(milliseconds: 200), () {
        // 初始化Google Maps控制器
        _initializeMap();
      });
    }
    
  • 管理地图控件的生命周期:使用AutomaticKeepAliveClientMixin保持地图页面的状态,避免频繁重建。或者在页面切换时手动销毁和重建地图控件:

    class MapPage extends StatefulWidget {
      @override
      _MapPageState createState() => _MapPageState();
    }
    
    class _MapPageState extends State<MapPage> with AutomaticKeepAliveClientMixin {
      @override
      bool get wantKeepAlive => true;
    
      @override
      Widget build(BuildContext context) {
        super.build(context);
        return GoogleMap(/* 配置参数 */);
      }
    }
    
  • 更新Google Maps依赖版本:该错误可能是旧版本Google Maps SDK的已知问题,尝试升级google_maps_flutter插件到最新稳定版。在pubspec.yaml中更新:

    dependencies:
      google_maps_flutter: ^latest_version
    

    然后运行flutter pub get更新依赖。

  • 避免快速连续切换:在底部导航栏的点击事件中添加防抖逻辑,防止短时间内多次切换到地图页面:

    bool _isNavigating = false;
    
    void _onTabTapped(int index) {
      if (_isNavigating) return;
      _isNavigating = true;
      setState(() {
        _currentIndex = index;
      });
      Future.delayed(const Duration(milliseconds: 300), () {
        _isNavigating = false;
      });
    }
    

总结

这类崩溃通常是由于地图控件在快速重建时的资源未正确释放或初始化导致的。优先尝试更新依赖版本和添加延迟初始化,这两个方案解决过很多类似的Google Maps快速切换崩溃问题。

内容的提问来源于stack exchange,提问作者Neel Moradiya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:55:47