我正在尝试将我的数据存储在Firestore中,其中该数据是数组并将其输出到卡中。到目前为止,我得到的输出为“ null”。获取此数据数组的最佳方法是什么?我正在使用StreamBuilder<QuerySnapshot>
来获取数据。
这是我的代码:
StreamBuilder<QuerySnapshot>(
stream: db.collection('ACTIVITIES').snapshots(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Column(
children: snapshot.data.documents
.map((doc) => buildItem(doc))
.toList());
} else {
return SizedBox();
}
})
在这里我尝试输出数据:
Card buildItem(DocumentSnapshot doc) {
return Card(
elevation: 5,
child: Padding(
padding: const EdgeInsets.all(8),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
'Name: ${doc.data['Name_ofUser']}',
style: TextStyle(fontSize: 20),
),
Text(
'Description: ${doc.data['Help_Description']}',
style: TextStyle(fontSize: 20),
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
FlatButton(
color: Color(0xFF121A21),
shape: new RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(30.0),
),
onPressed: () {},
child: Text(
'Respond',
style: TextStyle(color: Colors.white, fontSize: 12),
),
),
SizedBox(
width: 5,
),
FlatButton(
color: Color(0xFF121A21),
shape: new RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(30.0),
),
onPressed: () {},
child: Text(
'Read',
style: TextStyle(color: Colors.white, fontSize: 12),
),
)
],
),
],
),
),
);
}
这是我的数据库结构:
答案 0 :(得分:2)
您的ACTIVITIES
集合可以具有任意数量的文档,其中每个文档可以具有任意数量的Issue
。
在您的情况下,您只有1个文档,并且包含Issue
数组。
因此,如果要显示第一个文档的所有Issue
,则可以执行以下操作:
return Column(
children: snapshot.data.documents.first['Issue']
.map<Widget>((issue) => buildItem(issue))
.toList());
然后buildItem()
将收到Map<String, dynamic>
,如下所示:
Card buildItem(Map issue) {
现在,您可以像这样访问地图:
issue['Help_Description']
如果要在一个栏中显示所有文档中的所有问题,一个显示另一个,则可以执行以下操作:
final issuesLists = snapshot.data.documents
.map((doc) =>
doc['Issue'].map<Widget>((issue) => buildItem(issue)).toList())
.toList();
return Column(children: issuesLists.expand<Widget>((issues) => issues).toList());