在Flutter中保存谷歌地图状态



所以我基本上有一个带有三个选项卡的应用程序。在其中一个上,我有一个带有相应标记的谷歌地图和一个带有基于位置的Firestore查询的监听器。选择该选项卡后,将查询附近的元素并将其显示在地图上。

但是,当我更改选项卡并再次返回映射时,映射、侦听器和所有标记都将再次设置(因为调用了initState()dispose()(。

选择页面后,保存地图中的所有状态并继续使用地图的上一状态的最佳方法是什么?

我读过一些关于Redux和BloC的文章,这是我在这里需要的模式吗?如果是,如何将其应用于GoogleMap?

我也遇到了同样的问题,Flutter基本上每次更改页面都会重新加载你的谷歌地图页面。我使用IndexedStack解决了这个问题。所以我一直把所有的页面都放在堆栈中,它们不会重新加载。我不确定这是否是最好的方法,但它有效。

child: new IndexedStack(
children: _pages,
index: widget.currentItem,
),

IndexedStack只显示Stack的索引项,但所有项都在堆栈中,即使它们没有显示,所以在更改选项卡时不会重新加载。使用setState根据TabBar索引的索引更改currentItem。。。

您实际上可以使用AutomaticKeepAliveClientMixin强制Flutter保持小部件树的活力,如下所示:

class LocationMapScreen extends StatefulWidget {
@override
_LocationMapScreenState createState() => _LocationMapScreenState();
}
class _LocationMapScreenState extends State<LocationMapScreen>
with AutomaticKeepAliveClientMixin {
@override
bool get wantKeepAlive => true;
// ....
}

最新更新