【问题标题】:Firebase: Stop refresh of data after going of pageFirebase:页面结束后停止刷新数据
【发布时间】:2019-08-13 06:57:11
【问题描述】:

我目前有一个导航栏,可以在存储在列表中的不同Containers 之间切换。其中一个Containers 包含一个StreamBuilder,用于从firebase 设置一个监听器。但是,我的问题是,每次我从页面导航并返回到它时,页面都会“刷新”并再次从 firebase 中提取数据。我不希望它这样做,因为这会导致我的阅读量增加,从而产生成本。

我当前的代码是这样的:

StreamBuilder(
            stream:
                Firestore.instance.collection('Lessons').limit(4).snapshots(),
            builder: (context, snapshot) {
              if (!snapshot.hasData)
                return const Text('Loading your Lessons....');
              print("rebuilt");
              return ListView.builder(
                itemExtent: 80.0,
                itemCount: snapshot.data.documents.length,
                itemBuilder: (context, index) =>
                    _buildListItem(context, snapshot.data.documents[index]),
              );
            }),

有没有办法让之前加载的lessons在下次页面返回时显示?

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    这是因为你正在使用

    stream: Firestore.instance.collection('Lessons').limit(4).snapshots(),
    

    在您的 build() 方法中,可以多次调用该方法。

    所以更好的方法是声明一个变量,如:

    Stream stream;
    

    在你的initState 中定义如下:

    @override
    void initState() {
      super.initState();
      stream = Firestore.instance.collection('Lessons').limit(4).snapshots();
    }
    

    然后你可以像这样使用它:

    stream: steam
    

    因为initState 在树中只被调用一次(除非你正在做一些其他特殊的事情),所以你只发出一次读取请求,然后你可以在任何你想要的地方使用它。

    【讨论】:

    • 我已经按照这种方式加载 Firestore 数据,但我发现当我最初转到绘制 Firestore 数据的第一页时,它最初并没有加载。我必须离开该页面,返回,然后加载。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多