Flutter:使用 Streambuilder<QuerySnapshot> 时如何在 firestore 中获取特定文档

Posted

技术标签:

【中文标题】Flutter:使用 Streambuilder<QuerySnapshot> 时如何在 firestore 中获取特定文档【英文标题】:Flutter: How to get a specific document in firestore when using Streambuilder<QuerySnapshot> 【发布时间】:2020-03-04 16:24:57 【问题描述】:

我的代码目前有问题,我试图在我的数据库中获取特定数据。我想做的是收集>我想要获取的特定文档>字段(我的数组数据)。截至目前,我有一个代码,它可以执行我正在尝试执行的操作,但问题是它只获取了我文档中的第一个数据。请帮忙。

我的代码:

 StreamBuilder<QuerySnapshot>(
                stream: db.collection('NOTIFICATION').snapshots(),
                builder: (context, snapshot) 
                  if (snapshot.hasData) 
                    return Column (
                        children: snapshot.data.documents.first['Respondent']
                            .map<Widget>((respondent) => buildItem(respondent))
                            .toList());
                   else 
                    return SizedBox();
                  
                )

我的数据库结构:

急需帮助。

【问题讨论】:

【参考方案1】:

你可以改变这个:

snapshot.data.documents.first['Respondents'];

为此:

snapshot.data.documents.firstWhere((doc) => doc.documentID == 'id')['Respondents'];

处理不同的情况:

var doc = snapshot.data.documents
    .firstWhere((doc) => doc.documentID == 'id', orElse: () => null);
if (doc == null) 
  return Text('Document doesn\'t exist');
 else if (doc['Respondents'] == null) 
  return Text('Document without respondents');
 
return Column(children: doc['Respondents'].map<Widget>(...));

【讨论】:

它似乎在说坏状态:没有元素先生@pablo。 它工作先生@pablo,但问题是如果没有用于参考的“id”上的数据。它显示了“坏状态:无元素”的无限循环,我该如何解决这个问题?我试图只输出一个容器或一个大小的盒子,但它不起作用。 它仍然显示“坏状态:无元素”先生的无限循环:( 我还应该把它包装在 if(snapshot.hasdata) 中吗? 它现在可以工作了!非常感谢@pablo先生。你是唯一一直帮助我的人。非常尊重你。

以上是关于Flutter:使用 Streambuilder<QuerySnapshot> 时如何在 firestore 中获取特定文档的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:Streambuilder - 关闭流

来自一个 StreamBuilder 的 Flutter 快照显示在另一个 StreamBuilder 中

Flutter:StreamBuilder 快照——无数据

如何在 Flutter 的 StreamBuilder 中使用 Future [重复]

Flutter:Streambuilder 导致 Firestore 上的读取过多

使用 streamBuilder 实现 Flutter BLoC