firebase - FireStore Flutter 多步查询

标签 firebase dart flutter google-cloud-firestore

我是第一次在 Flutter 中开发一个项目,并试图找到组织我的 Firestore 数据库的最佳方式。我相信我已经按照我想要的方式拥有它,但无法弄清楚如何正确查询它。

我有一个用户拥有一个集合的 ID,该集合将玩家个人资料与其用户个人资料相关联(在单独的集合中)。

我需要:

  1. 获取 Firebase 当前用户 uid
  2. 找到相关的玩家资料
  3. 获取保存到玩家资料中的事件 ID
  4. 基于 ID 的事件列表

我猜是按这个顺序。

DatabaseReference getCurrentUserRef() async {
    return this.usersRef.child((await this.getCurrentUser()).uid);
  }

var user = await getCurrentUserRef()
var _playerEvents = [];

db.collection('player').where('id', isEqualto: user).get().then((doc) => {
   db.collection('player').doc(doc.data().id).collection('events').get().then((snapshot) => {
      snapshot.forEach(doc) {
         _playerEvents.push(doc.data().id);
      }
   });
});

然后使用该数组,我需要根据这些 id(如果有的话)获取所有事件

_playerEvents.forEach(event) {
    db.collection('events').where('id', isEqualTo: event).get().then((doc) => {
         //somehow popular a Map or JSON that I can show in a list view on the page for the events associated with that player
         List_Item for display
    });
}

这是我的数据库的一些屏幕。我正在学习使用 Dart 的 Flutter。任何帮助都会很棒。

User Collection

Player Collection

Events Collection

最佳答案

我对 Flutter 不是很熟悉,所以我无法在代码上帮助您。

但为了插入您走上正确的道路:

Firestore 是异步的。因此,要完成上述所有 4 个步骤,您需要使用回调来完成它们。

我不认为你可以用那种方式级联查询(如果它类似于 Java,你不能那样做)。

您需要做的是在每次查询完成后引入回调,以便您有足够的信息来进行下一次查询。

关于firebase - FireStore Flutter 多步查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53766918/

相关文章:

swift - 将具有 "posted"帖子的用户个人资料图像加载到 TableView 上

dart - 如何在AngularDart组件的更改回调中获取选定的选项

Flutter - 容器高度与子 Text.length 相同?

flutter - 如何在底部屏幕上实现可滚动选项卡

flutter - 在异步中等待而不是等待完成

node.js - 尝试获取所有文档时,Firebase 数据库集合返回空数组

angular - 使用 Angular2、angularfire2 和 Typescript 从 Firebase 对象中获取数据

Java 通过键名从对象中获取值

dart - 如何在执行 POST 请求时解决 Flutter CERTIFICATE_VERIFY_FAILED 错误?

flutter - MediaQuery 与 IntrinsicHeight