如何在Firestore上使用startAfter?

时间:2019-04-20 20:04:18

标签: flutter

我想更新我的gridview并使用startAfter从Firestore获取数据。 下面是我如何获取第一个数据的代码。 在下一个查询中如何使用startAfter?

Firestore.instance.collection('Posts').limit(6).getDocuments().then((snap){
      postList.clear();
      for(int i=0; i<snap.documents.length; i++){
        Post post = new Post(snap.documents[i]['imageUrl'],
            snap.documents[i]['userId'],
            snap.documents[i]['color'],
            snap.documents[i]['brand'],
            snap.documents[i]['sex'],
            snap.documents[i]['category']);
        postList.add(post);
      }
      setState(() {
        print('Length : $postList.Lenth');
      });
    });

下一个查询。

Firestore.instance.collection('Posts').startAfter(whats here?).limit(8).getDocuments().then((snap){
        for(int i=0; i<snap.documents.length; i++){
          Post post = new Post(snap.documents[i]['imageUrl'],
              snap.documents[i]['userId'],
              snap.documents[i]['color'],
              snap.documents[i]['brand'],
              snap.documents[i]['sex'],
              snap.documents[i]['category']);
          postList.add(post);
        }
        setState(() {
          print('Length : $postList.Lenth');
        });
      });```

3 个答案:

答案 0 :(得分:0)

您必须传递最终从Firebase收到的任何值,并且该值必须为唯一

在您的情况下,您必须传递postList的id参数的最后一个元素。

EX:

postList [postList.length-1] .id

答案 1 :(得分:0)

好的,如果有人遇到这样的问题,那就有解决办法了

_lastDocument = snap.documents[snap.documents.length-1];

.orderBy('dataTime').startAfter([_lastDocument.data['dataTime']])

答案 2 :(得分:0)

如官方视频所示https://www.youtube.com/watch?v=poqTHxtDXwU&t=303s 在 4:20,使用“startAfter”不是一个好主意,因为将 orderBy 设置的值列表作为参数(它有点混乱,并且像视频所说的那样容易出错,请查看文档以获取更多信息)而不是使用 < strong>startAfter Document,您可以在其中放置整个 DocumentSnapshot(您第一次调用的最后一个文档),这样您就有机会获得意想不到的结果并且更容易,这里是文档 startAfterDocument method