使用startAfter的Flutter Firestore查询

时间:2018-09-26 08:57:06

标签: firebase flutter google-cloud-firestore

我正在使用Flutter(cloud_firestore),并尝试从标题为'xxx'的文档后的Firestore中获取数据,但是它返回0个结果。

return Firestore.instance.collection('products')
    .orderBy('title')
    .startAfter([{'title': 'xxx'}
]);

我在做什么错?如何正确实现抖动分页?

2 个答案:

答案 0 :(得分:4)

您应该传递一个值,而不是一个映射:

return Firestore.instance.collection('products')
    .orderBy('title')
    .startAfter(['xxx']);

关于此的文档不​​是特别清楚。

答案 1 :(得分:0)

这对我有用。我的orderBy基于{名字,姓氏和电子邮件}。因此,startAfter也应该匹配这些字段值。我将文档保存在一个变量中,然后用这些字段的值制成一个列表,并用作startAfter参数。

static final Query queryBase = userCollectionRef
      .orderBy(FieldNames.FIRST_NAME)
      .orderBy(FieldNames.LAST_NAME)
      .orderBy(FieldNames.EMAIL);

  DocumentSnapshot _lastUser;
  Future<List<DocumentSnapshot>> getAllUserDocuments({
    bool next,
    int limit = 10,
  }) async {
    List<DocumentSnapshot> _userDocSnaps = [];
    try {
      if (!next) _lastUser = null;
      Query _query = queryBase;
      if (_lastUser != null)
        _query = _query.startAfter([
          _lastUser.data[FieldNames.FIRST_NAME],
          _lastUser.data[FieldNames.LAST_NAME],
          _lastUser.data[FieldNames.EMAIL],
        ]);
      var _userDocsSnap = await _query.limit(limit).getDocuments();
      if (_userDocsSnap != null && _userDocsSnap.documents != null) {
        _userDocSnaps = _userDocsSnap.documents;
        if (_userDocSnaps != null && _userDocSnaps.length >= 1)
          _lastUser = _userDocSnaps[_userDocSnaps.length - 1];
      }
    } catch (err) {
      String errMessage = 'Exception in method _getAllUserDocuments';
      PrintHelper.handlePrint(errMessage, err);
    }
    return _userDocSnaps;
  }