firebase - 将来自 Firestore 的文档存储在列表中
问题描述
我正在尝试从名为“Org”的集合中检索文档并将其存储在列表中以显示在下拉菜单中,但列表返回[Instance of 'QueryDocumentSnapshot', Instance of 'QueryDocumentSnapshot']
,因此我收到以下错误:
The method 'map' was called on null.
Receiver: null
Tried calling: map(Closure: (dynamic) => DropdownMenuItem<dynamic>)
这是我实现的代码:
void organisation() async {
await Firebase.initializeApp();
QuerySnapshot querySnapshot = await FirebaseFirestore.instance.collection("Org").get();
final List<DocumentSnapshot> list = querySnapshot.docs;
print(list);
list.forEach((data) => print(data));
}
@override
initState() {
Firebase.initializeApp();
organisation();
super.initState();
}
这就是我实现下拉菜单的方式:
DropdownButtonFormField(
validator: (value) => value == "Select" ? 'Field required' : null,
value: _selectorg,
onChanged: (val) => setState(() => _selectorg = val),
items: list.map(
(item) {
return DropdownMenuItem(
child: Text('$item'),
value: item,
);
},
).toList(),
hint: Text(
"SELECT ORGANISATION",
style: TextStyle(color: Colors.white)),
),
解决方案
尝试这个,
@override
initState() {
super.initState();
Firebase.initializeApp();
organisation();
}
和,
在函数之外声明你的列表
final List<DocumentSnapshot> list;
void organisation() async {
await Firebase.initializeApp();
QuerySnapshot querySnapshot = await FirebaseFirestore.instance.collection("Org").get();
list = querySnapshot.docs;
print(list);
list.forEach((data) => print(data));
}
更新
StreamBuilder(
stream: FirebaseFirestore.instance.collection("Org").get();
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshots) {
if (snapshots.connectionState == ConnectionState.active &&
snapshots.hasData) {
print(snapshots.data);
return ListView.builder(
itemCount: snapshots.docs.length,
itemBuilder: (BuildContext context, int index) {
DocumentSnapshot doc = snapshots.data[index];
Map data= doc.data;//This is your data
return Text(
data.toString(),
);
},
);
} else {
return Center(child: CircularProgressIndicator());
}
},
),
推荐阅读
- java - 为什么 node.next 去下一个节点
- android - 是否可以使用camera2在不预览的情况下捕获原始图像
- javascript - 如何在打字稿中找到递归父级
- android - 如果设置了正常的 `title`,Firebase 通知将不会默认为 `title_loc_key`
- java - Flowable bpmn:为进程中的子任务配置父ID
- spring-boot - 意外取消信号和 503 响应代码
- flutter - 扩展磁贴中的循环 json
- node.js - 如何验证和解析电话号码以提取其国家/地区电话代码和区号?
- mysql - 尝试编写要在 mysql UPDATE SET 语句中使用的存储函数
- tizen - 注册申请失败