[英]Return List<User> from Firestore Flutter
我想从 Firestore 返回一个List<User>
,问题是这个询问的结果是一个空列表。 我确定问题在于我如何处理将项目添加到现有列表的过程,也许我没有等待它们或类似的东西。
我将显示代码:
List<User> readUsers(String path, int limit) {
List<User> users = [];
FirebaseFirestore.instance
.collection(path)
.limit(limit)
.get()
.then((snapshot) {
if (snapshot == null)
print("Snapshot is null");
else {
snapshot.docs.forEach((data) {
User user = User(
name: data['name'],
id: data['id'],
);
users.insert(0, user);
});
}
});
if (users.isNotEmpty) {
users.forEach((element) {
element == null ? print("") : print(element.id);
});
} else {
print("User is empty!");
}
return users;
}
这个 function 的结果总是print
“用户为空”。
编辑:来自此 function 的数据必须存储在变量中,并且值必须打印如下:
try {
List<User> users;
widget.database
.readUsers("users", 2)
.then((value) => users = value);
users.forEach((element) {
print(element.id);
});
} catch (e) {
print(e);
}
现在users
的价值还是null。
您的代码中有两个问题。
async
的,并且在您测试 List users
的空性之前不会完成。 这就是您的List<User>
始终为空的原因。 您应该将readUsers
定义为async
,并await
QuerySnapshot
snapshot.docs
是List<QueryDocumentSnapshot>
。 应使用方法data()
访问数据。尝试这个:
Future<List<User>> readUsers(String path, int limit) async {
final snapshot =
await FirebaseFirestore.instance.collection(path).limit(limit).get();
return snapshot.docs
.map(
(doc) => User(
id: doc.data()['id'],
name: doc.data()['name'],
),
)
.toList();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.