Flutter GoogleMap 从后台恢复后为空白

jbx*_*dev 13 android google-maps google-maps-android-api-2 flutter google-maps-flutter

我遇到了以下问题:我的 Flutter 应用程序使用 GoogleMap。地图最初加载得很好。但是,如果我将应用程序置于后台并稍后恢复,则地图将保持空白。Google 徽标仍然显示,就像未指定 API 密钥时发生的情况一样。我的多边形叠加层也没有显示。

该行为不能可靠地重现。有时,应用程序在后台运行数小时后地图加载良好,有时几分钟后地图是空白的。到目前为止,我只在 Android 上看到过这种行为。

没有指示错误的特定日志输出。

任何想法如何解决/解决这个问题?

我在这里提交了一个截图问题:https : //github.com/flutter/flutter/issues/40284

编辑 1: 我能够使用 GoogleMap 作为根小部件重现它,并且没有任何多边形/特征叠加。此外,我发现在某个点疯狂放大会“重新激活”地图(突然地图再次变得可见)。这可能是底层 Android Google Maps SDK 的已知问题吗?

编辑 2: 我发现地图仍在反应(例如点击/手势侦听器仍然触发)。此外,地图并不是真的空的,它只是变得半透明,所以屏幕会显示地图后面的任何小部件。

小智 19

我发现如果您点击标记或更改样式,地图会重新渲染

class TheWidgetThatHasTheMap with WidgetsBindingObserver {

   //...your code

    @override
    void didChangeAppLifecycleState(AppLifecycleState state) {
        if (state == AppLifecycleState.resumed) {
            controller.setMapStyle("[]");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


jbx*_*dev 3

不是核心问题的解决方案,但我能够通过创建插件项目的分支并修改 GoogleMapController.java 来解决此错误,如下所示:

@Override
  public void onActivityResumed(Activity activity) {
    if (disposed || activity.hashCode() != registrarActivityHashCode) {
      return;
    }
    mapView.onResume();
    // Workaround for https://github.com/flutter/flutter/issues/40284
    // This apparently forces a re-render of the map.
    if (googleMap != null) {
      googleMap.setMapType(googleMap.getMapType());
    }
  }
Run Code Online (Sandbox Code Playgroud)

现在,在每个恢复事件中,地图都会重新渲染。