Android 从背景恢复后,颤振谷歌地图为空白
我遇到了以下问题:我的颤振应用程序使用谷歌地图。贴图最初加载得很好。但是,如果我将应用程序放在后台,稍后再继续,地图将保持空白。Google徽标仍然显示,就像API密钥未指定时一样。我的多边形叠加也没有显示 这种行为不值得谴责。有时,应用程序在后台运行数小时后,地图加载正常,有时几分钟后地图空白。到目前为止,我只在Android上见过这种行为 没有指示错误的特定日志输出 有没有办法解决这个问题 我在这里用截图提交了一个问题: 编辑1: 我可以用GoogleMap作为根部件来复制它,也没有任何多边形/特征覆盖。此外,我还发现在某个点疯狂地放大会使地图“复活”(突然地图再次可见)。这可能是底层安卓谷歌地图SDK的已知问题吗 编辑2:Android 从背景恢复后,颤振谷歌地图为空白,android,google-maps,flutter,google-maps-android-api-2,google-maps-flutter,Android,Google Maps,Flutter,Google Maps Android Api 2,Google Maps Flutter,我遇到了以下问题:我的颤振应用程序使用谷歌地图。贴图最初加载得很好。但是,如果我将应用程序放在后台,稍后再继续,地图将保持空白。Google徽标仍然显示,就像API密钥未指定时一样。我的多边形叠加也没有显示 这种行为不值得谴责。有时,应用程序在后台运行数小时后,地图加载正常,有时几分钟后地图空白。到目前为止,我只在Android上见过这种行为 没有指示错误的特定日志输出 有没有办法解决这个问题 我在这里用截图提交了一个问题: 编辑1: 我可以用GoogleMap作为根部件来复制它,也没有任何多边
我发现地图仍在反应(例如,轻触/手势侦听器仍在触发)。此外,地图并不是真的空的,它只是变得半透明,所以屏幕显示地图后面的任何小部件 不是核心问题的解决方案,但我通过创建插件项目的分支并修改GoogleMapController.java,解决了这个bug,如下所示:
@覆盖
活动上的公共无效已使用(活动){
if(disposed | | activity.hashCode()!=registeractivityhashcode){
返回;
}
onResume();
//解决方法https://github.com/flutter/flutter/issues/40284
//这显然会强制重新渲染贴图。
if(谷歌地图!=null){
setMapType(googleMap.getMapType());
}
}
现在,在每个恢复事件中,贴图都将重新渲染。我发现,如果点击标记或更改样式,贴图将重新渲染
class TheWidgetThatHasTheMap with WidgetsBindingObserver {
//...your code
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.resumed) {
controller.setMapStyle("[]");
}
}
}
另一个不需要分叉插件、构建等的临时修复程序。
将通过
WidgetsBindingObserver
实现的didchangeapplicystate
添加到您的小部件中,并使用状态更改重建GoogleMap小部件。这可能是一个愚蠢的问题,但您能够缩小地图吗。从截图上看,似乎被放大到了“地面”层面。根本没有愚蠢的问题。:-)是的,它尝试过缩放,但不起作用。此外,底图是卫星地图,因此它至少会显示一些颜色。我尝试在onmacreated
中使用GoogleMapController
controller,但它没有setMapStyle
method@kashlo如果您的控制器定义为Completer _controller=Completer();然后您需要首先使用最终的GoogleMapController=wait\u controller.future;检索它;。setMapStyle将显示。知道当地图位于选项卡内时该怎么做吗?DidChangeApplieCycleState没有在我的选项卡中调用,只在我的HomeWidget(包含该选项卡)中调用@Thomas我在选项卡中也遇到了同样的问题,我使用下面的代码解决了这个问题。请尝试使用此代码,并让我知道它是否适用于您。代码:SystemChannels.lifecycle.setMessageHandler((msg){debugPrint('SystemChannels>$msg');if(msg==AppLifecycleState.resume.toString())setState((){mapsController.setMapStyle([]);})@瓦贾尼基山,我会试试的。你把它放在选项卡本身的initState()中了吗?这个解决方案工作了一段时间,然后在将应用程序设置好几次后,问题再次出现