Flutter集成google_maps_flutter地图不显示问题求助
Flutter google_maps_flutter 地图空白问题排查与解决
问题描述
在Flutter应用中集成google_maps_flutter包后,界面仅显示空白。相关代码如下:
GoogleMap( mapType: MapType.hybrid, onTap: (LatLng point) { print("object"); // controller.addPoint(point); }, onMapCreated: (GoogleMapController controller1) { print("0########################"); controller.mapController = controller1; }, initialCameraPosition: CameraPosition( target: LatLng(9.9252, 78.1198), zoom: 10, ), ),
运行日志关键信息:
[GETX] CLOSE TO ROUTE /map V/GoogleMapController(18119): Controller was disposed before GoogleMap was ready. E/PlatformViewsController(18119): Disposing platform view threw an exception E/PlatformViewsController(18119): java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.LinkedList.isEmpty()' on a null object reference [GETX] "MapController" onDelete() called
问题分析
- 控制器提前销毁:日志中
Controller was disposed before GoogleMap was ready明确说明GetX的MapController在谷歌地图组件完成初始化前就被销毁,导致地图无法正常加载。 - 生命周期异常:Java层的空指针异常进一步验证了控制器提前销毁后,地图视图的生命周期管理出现错乱。
解决方案
绑定控制器与页面生命周期
使用GetX时,确保控制器生命周期与页面同步,避免页面未加载完成就销毁控制器:// 在页面初始化时绑定控制器,页面销毁时才回收控制器 final controller = Get.put(MapController(), permanent: false);检查谷歌API配置
确认AndroidManifest.xml中已正确配置API密钥,且密钥已启用谷歌地图Android SDK服务:<meta-data android:name="com.google.android.geo.API_KEY" android:value="你的API密钥"/>优化控制器销毁逻辑
在MapController的onDelete方法中延迟销毁地图控制器,避免地图未就绪时被回收:class MapController extends GetxController { GoogleMapController? mapController; @override void onDelete() { Future.delayed(const Duration(milliseconds: 500), () { mapController?.dispose(); }); super.onDelete(); } }排查路由跳转逻辑
日志中[GETX] CLOSE TO ROUTE /map显示页面可能被意外关闭,检查路由跳转代码,确保地图页面在地图加载完成前不会被销毁。兼容依赖版本
检查google_maps_flutter与get包的版本兼容性,尝试切换到稳定版本:dependencies: google_maps_flutter: ^2.5.0 get: ^4.6.5
内容的提问来源于stack exchange,提问作者Vasanthan Raj
相关产品推荐
相关产品推荐

