firebase - 问题将元素添加到列表
问题描述
我是 Flutter 的新手,我正在尝试将 Cloud Firestore 中的一些数据添加到 Flutter 的列表中,但遇到了问题。我尝试添加元素,但执行后,元素不存在。它也没有抛出异常或任何东西。也许其他人对我有一些建议!
我尝试更改列表的类型(从 Cloud Firestore 捕获文档而不是文档中的数据,同样的问题),我还调试打印了我要存储的数据以确保它存在,它确实存在。我也完成了基本的故障排除,比如运行 flutter clean 。我正在使用最新版本的 Flutter。
Firestore db = firestore();
List<String> getString() {
var dataList = new List<String>();
db.collection('Users').get().then((querySnapshot) {
querySnapshot.forEach((doc) {
dataList.add(doc.get('First name'));
});
});
debugPrint(dataList.first);
return dataList;
该列表为空,但应包含此 Cloud Firestore 文档中的“名字”字段。再次验证数据确实存在并在调用 debugPrint 时打印。
解决方案
这db.collection('Users').get()
是一个异步函数,因此debugPrint(dataList.first);
在您的火库获取结束之前执行,因为您的数组返回空。
如果你尝试一下:
db.collection('Users').get().then((querySnapshot) {
querySnapshot.forEach((doc) {
dataList.add(doc.get('First name'));
});
debugPrint(dataList.first);
});
你会看到你的数据。
您可以使用await
等待调用完成,因此您必须返回 aFuture
并在函数声明中使用async
关键字。这是flutter异步函数(Async Flutter)必知的一个概念。所以,下面的代码可以解决你的问题。
Firestore db = firestore();
Future <List<String>> getString() async {
var dataList = new List<String>();
var result = await db.collection('Users').get();
result.forEach((doc) {
dataList.add(doc.get('First name'));
});
debugPrint(dataList.first);
return dataList;
}
推荐阅读
- jetty - 无法在码头嵌入式服务器中设置 MaxFormContentSize
- meteor - Meteor Google OAuth 错误:“无法完成与 Google 的 OAuth 握手”错误 401 Unauthorized
- jooq - JOOQ 连接两个具有相同列名的表
- mysql - 是否可以创建一个触发器,该触发器在将记录插入一个数据库但最终插入另一个数据库时执行?
- android - 更改 primaryKeys 顺序会更改 ROOM 中保存的数据的顺序
- c++ - 初始化自动变量时可能出现 gcc 一致性问题?
- javascript - Javascript从像素坐标计算数据索引
- python - 循环直到页面上的消息更改硒python
- linux - 删除从 `which` 命令输出的链接之一
- javascript - 如何检查用户界面上记录的文件上传时间在赛普拉斯中是否正确