【问题标题】:Getting user array data from firestore using flutter使用flutter从firestore获取用户数组数据
【发布时间】:2020-09-12 15:22:39
【问题描述】:

在我的 Firestore 数据库中,我的目录 users 包含用户数据为 documents。该文档有两个字段,String 'displayName' 和 Array 'friends'。我正在努力检索朋友数组并将其放入流中颤动的列表中。任何帮助表示赞赏。

我目前的代码如下:

Stream<List<Memo>> get memos {
    var userdocs = Firestore.instance.collection('users').document(userid).document('friends');
    // Complete request and do list conversions 

    // Do more work using results
}

我知道这个问题以前有人问过,但我对 Flutter 很陌生,异步编程并不完全理解答案

【问题讨论】:

  • ' document(userId).collection('friends'),如果再次调用 document 将不起作用。
  • friends 是一个字符串数组类型的文档。在过去,它是一个集合,每个文档代表一个朋友,但我无法检索文档名称(朋友名称)列表,因此我将其切换为这种格式,尽管首选前一个格式
  • 为什么无法获取好友列表?这应该是可能的,您可以使用查询进行过滤。如果您在文档中使用数组,您将在此处获得数组“Firestore.instance.collection('users').document(userid)”,因为该数组是文档“userId”的一部分,您只需要找到一个从中提取数据的方法,但是如果朋友列表增长很多,使用数组可能不是一个好主意,因为可以推断文档限制大小,并且集合可以永远增长。
  • 他无法完全正确地阐明他想要什么。我建议进行编辑。让他看到并接受这一点。
  • 感谢Yogesh的建议,我接受了。

标签: arrays flutter dart google-cloud-firestore casting


【解决方案1】:

flutter SDK 返回一个Stream 对象,该对象将随着时间的推移发出值(实时数据库)。在您的示例中,您正在分配 Stream 值并期望 List。在异步编程中,您必须订阅一个事件,以便每当发出一个值时,我们就可以执行我们想要的操作。

var userdocs
Firestore.instance
    .collection("users")
    .document(userid)
    .get()
    .then((DocumentSnapshot ds) {
       userdocs = ds.data
     })

如果您在 async 函数中,则使用 await

var userdocs = await Firestore.instance
    .collection("users")
    .document(userid)
    .get()

【讨论】:

  • 这很好用,谢谢。我还想问您是否可以演示如何从集合中获取所有文档名称。这是我过去无法弄清楚如何做的事情,但将来可能会很有用。
猜你喜欢
  • 2021-04-17
  • 2019-10-27
  • 2021-11-08
  • 2021-04-10
  • 2019-10-22
  • 1970-01-01
  • 2018-12-22
  • 2020-04-01
  • 2020-05-01
相关资源
最近更新 更多