Flutter:使用Streambuilder <QuerySnapshot>

时间:2019-11-08 02:58:42

标签: flutter dart google-cloud-firestore flutter-layout

我的代码目前有问题,我正在尝试在数据库中获取特定数据。我要执行的操作是“收集”>“我要获取的特定文档”>“字段(我的阵列数据)”。到目前为止,我有一个代码可以执行我想做的事情,但是问题是它仅获取文档中的第一个数据。请帮忙。

我的代码:

 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();
                  }
                })

我的数据库结构:

enter image description here

非常需要帮助。

1 个答案:

答案 0 :(得分: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>(...));