我试图通过从Firebase数据库中提取用户列表来填充Flutter应用程序中的DropDownButton,但快照为空。我知道有项目的集合,所以我不知道是什么错了。
下面是StreamBuilder的代码:
StreamBuilder<QuerySnapshot>(
stream: _db.collection('users').snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData == true) {
return const Center(
child: CircularProgressIndicator(),
);
} else {
final usersList = snapshot.data.docs;
return DropdownButton<String>(
hint: const Text("Select User"),
value: _currentCompany,
onChanged: changedDropDownCompany,
items: snapshot.data.docs
.map<DropdownMenuItem<String>>((document) {
return DropdownMenuItem<String>(
value: document.id,
child: Text(document.data()['fName']),
);
}).toList(),
);
}
}),
下面是一张Firebase的照片:x1c 0d1x这应该能用。我哪里做错了?
谢谢你的帮助
EDITS Ok,所以final usersList = snapshot.data.docs;用数据填充usersList,但我得到以下错误:
我修改了代码如下:
StreamBuilder(
stream: _db.collection('users').snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
final usersList = snapshot.data.docs;
return DropdownButton<String>(
hint: const Text("Select User"),
value: _currentCompany,
onChanged: changedDropDownCompany,
items: usersList
.map<DropdownMenuItem<String>>((usersList) {
return DropdownMenuItem<String>(
value: usersList.id.toString(),
child: Text(usersList.data()['fName']),
);
}).toList(),
);
} else {
return const CircularProgressIndicator();
}
}),
如果我试着计算“孩子:Text(UsersList.data()'fName'])”,它表示无法计算该行。
所以,我想现在我需要知道如何从快照中提取数据以添加到项目中:?
1条答案
按热度按时间dhxwm5r41#
你的逻辑错了。如果
snapshot.hasData
,则显示您的