Expo 独立版中最近的 MapView 问题 Android

Recent MapView issue in Expo standalone Android

这是一个新问题,似乎与 google 地图 API 有关 - 对我们来说不知从何而来。这似乎是不可能的,但我们的生产应用程序突然开始在我们的启动屏幕上偶尔出现错误。我们的启动画面主要是一个google地图,也就是世博会的MapView。

Uncaught Error: Error using newLatLngBounds(LatLngBounds, int): Map size can't be 0. Most likely, layout has not yet occured for the map view. Either wait until layout has occurre or use newLatLngBounds(LatLngBounds, int, int, int) which allows you to specify the map's dimensions.
This only happens on our Android standalone app, through Expo it works fine.

我们遵循了 Android 的文档:https://docs.expo.io/versions/v34.0.0/workflow/configuration/#android - 我们已经完成了这些步骤。据我们所知,我们已经使用不同的 API 键完成了两次该过程,我们得到了相同的结果。

我们已经尝试了建议的修复 here,即根据尺寸设置高度和宽度、设置 flex:1 以及设置 initialLocation。我们使用 onReady 来调用初始的 start 方法。似乎没有任何效果。

截至今天,上面的 github link 确实有人 运行 参与其中。任何关于如何调试它的想法?

我们刚刚删除了地图以外的所有内容,包括删除标记 - 而且它有效。我们发现只有当我们添加带有坐标的标记时才会出现此问题,我们通过将坐标传递给地图在一个全新的 expo 应用程序上重现了这个问题,这导致它在 Android 崩溃(大部分时间,但不是全部)当我们构建和加载 APK 时。 通过地图的 onReady 属性添加标记也没有阻止崩溃。

原来它是一个名为 onLayout 的未记录的方法,它仅在 fitToCoordinates 的文档中被引用。它提到如果提前调用此函数会导致崩溃,您可能需要使用 onLayout。我们从未调用过 fitToCoordinates 但显然 MapView 中的其他东西确实调用过。 有人提出了这个问题 here

我们将标记创建逻辑从 onReady 移到了 onLayout 并且它起作用了。

      <MapView
        testID="map"
        style={{flex: 1}}
        onMapReady={this.onMapReady}>
        {this.mapIsReady &&   <Marker
            key={id}
            coordinate={coordinate}/> }
       </MapView>

收件人:

      <MapView
...
        onLayout={this.onMapReady}

不再崩溃...