【问题标题】:Save Google Maps state in Flutter在 Flutter 中保存谷歌地图状态
【发布时间】:2019-04-02 17:17:31
【问题描述】:

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

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

当页面被选中时,保存地图中所有状态并继续地图上一个状态的最佳方法是什么?

我已经阅读了一些关于 Redux 和 BloC 的内容,这是我需要的模式吗?如果是,如何将其应用于 GoogleMap?

【问题讨论】:

    标签: google-maps flutter


    【解决方案1】:

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

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

    IndexedStack 只显示 Stack 的索引项,但所有的项即使没有显示也在堆栈中,所以当你改变标签时它们不会被重新加载。用 setState 根据 TabBar 索引的索引改变 currentItem...

    【讨论】:

    • 请添加一些解释好友。这不足以作为答案传递。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      相关资源
      最近更新 更多