【发布时间】:2020-09-01 23:56:08
【问题描述】:
我正在使用 google_maps_flutter 在我的颤振应用程序中嵌入地图。这个小部件的创建成本很高(加载地图图块需要一些时间),所以我想初始化这个小部件一次,保持它的状态,并在用户活动的整个生命周期中重复使用它。
Key googleMapKey = GlobalKey();
....
GoogleMap(
key: googleMapKey,
mapType: MapType.normal,
initialCameraPosition: CameraPosition(target: LatLng(lat, lng),
onMapCreated: (GoogleMapController controller) {
print("Map has been initialized");
....
}
...
)
到目前为止,我尝试将 GlobalKey() 分配给此小部件,以便在必要时可以重新设置小部件的父级。我确保一个 GlobalKey() 用于不同的页面。
在我的应用中,餐厅列表显示在列表视图中。当用户点击其中一个列表项时,会打开详细信息页面,并且除了其他餐厅详细信息之外,还会加载 GoogleMap 小部件。
但是,当用户返回上一个列表页面,并点击另一个列表项以打开另一个餐厅的详细信息页面时,GoogleMap 似乎被重新初始化,因为我看到“地图已初始化”文本再次显示。
我确实看到了 GlobalKey 的颤振文档中的以下 sn-p,尽管我不确定这是否是原因。
当它们从树中的一个位置移动到树中的另一个位置时,具有全局键的小部件会重新生成其子树。为了重新设置其子树的父级,小部件必须在同一动画帧中到达树中的新位置,在该动画帧中它从树中的旧位置移除。
在我的用例中使用 GlobalKey 的正确方法是什么?
【问题讨论】:
标签: flutter