【问题标题】:Flutter Firestore query with startAfter使用 startAfter 进行 Flutter Firestore 查询
【发布时间】:2018-09-26 08:57:05
【问题描述】:

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

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

我做错了什么?如何正确实现颤振分页?

【问题讨论】:

标签: firebase flutter google-cloud-firestore


【解决方案1】:

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

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

这方面的文档不是特别清楚。

【讨论】:

  • 你应该能够传入一个文档,这样即使多个文档共享相同的值,你也可以正确分页......我开始认为使用带有颤振的 Firestore 是一个错误。
  • 泰勒是正确的,他们的例子很清楚这一点:firebase.google.com/docs/firestore/query-data/…
【解决方案2】:

这对我有用。我的 orderBy 基于 {FirstName, LastName & Email}。因此,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;
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-15
    • 2021-04-18
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    相关资源
    最近更新 更多