【问题标题】:How to Get Real time Updates From Firebase In Firebase如何在 Firebase 中从 Firebase 获取实时更新
【发布时间】:2020-06-15 12:45:22
【问题描述】:

我一直在尝试让 Firebase 实时工作,但我遇到了一些问题。我想要实现的是能够判断何时将新文档添加到集合中,仅此而已。似乎正在发生的是我的代码总是返回集合中的所有文档。

下面是我的代码:

listenNewPost(int categoryId, Users user, Function(DocumentSnapshot) onData) async {
    var ref = this._firestore.collection('posts').reference();
    var query = ref.orderBy('created_at', descending: true);
    var _query = ref.where('category', isEqualTo: categoryId).orderBy('created_at', descending: true);

    if (categoryId == 1) {
      query.snapshots().listen((snapshot) {
        snapshot.documentChanges.forEach((doc) {
          if (doc.type == DocumentChangeType.added) {
            print('receieved: ' + doc.document.data.toString());
            onData(doc.document);
          }
        });
      });
    }
    else {
      _query.snapshots().listen((snapshot) {
        snapshot.documentChanges.forEach((doc) {
          if (doc.type == DocumentChangeType.added) {
            print('_receieved: ' + doc.document.data.toString());
            onData(doc.document);
          }
        });
      });
    }
  }

我有另一个获取所有帖子的代码,我想在当前屏幕中使用它来获取所有新帖子,因此我不必使用计时器来刷新屏幕。我有一个在上述代码之前运行的getAllPosts 方法。 getAllPosts 成功获取所有帖子,并且侦听器代码也获取所有帖子,而不是在添加新帖子时等待。以下是我如何调用代码:

因为我在使用 Flutter,所以这是我的代码:

void initState() {
    super.initState();
    this.allPosts = [];
    SOmeClass.listenNewPost();
    this.getAllPosts();
}

请问我做错了什么? 谢谢。

【问题讨论】:

    标签: firebase flutter google-cloud-firestore


    【解决方案1】:

    当您第一次将侦听器附加到该查询时,QuerySnapshot.documentChanges 将为与查询匹配的每个文档包含一个 DocumentChangeType.added

    如果您只想检索在特定时间之后创建的文档,则必须将该条件添加到您的查询中:

    var query = ref.orderBy('created_at', descending: true);
    query = query.where('created_at', '>=', new DateTime.now());
    

    【讨论】:

    • 上述解决方案对我不起作用,因为 created_at 将始终小于新的 DateTime.now(),因为插入将在我查询 db 之前发生
    • 在那种情况下,我不明白这个问题。现在您在查询中获得了哪些您不想获得的文档?
    猜你喜欢
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    相关资源
    最近更新 更多