我尝试使用flutter体验Firebase Live数据库。 我只想获得firebase响应的数据快照中的值。
我的Firebase
我的代码
scale_y_continuous(breaks=1:2, labels=c("a","b")
我获得了名字的空值。 我想我应该导航到snapshot.value的孩子。但不可能用foreach或Map()来管理......
亲切的问候,杰罗姆
答案 0 :(得分:2)
您正在查询查询和查询文档(here in JavaScript,但它对所有语言都有效),即表示"即使查询只有一个匹配项,快照仍然是一个清单;它只包含一个项目。要访问该项目,您需要循环结果。"
我不知道你应该如何在Flutter / Dart中对快照的子项进行循环,但是你应该执行以下操作(在JavaScript中):
snapshot.forEach(function(childSnapshot) {
var childKey = childSnapshot.key;
var childData = childSnapshot.val();
// ...
});
并假设您的查询只返回一条记录("一条匹配"),请在执行时使用子快照
var user = new User.fromSnapShot(childSnapshot.key, childSnapshot.value);
答案 1 :(得分:0)
这将为您提供可重用对话框中的用户。如果您不使用stream和stream-builders,可能会对自己造成一点伤害,下面的解决方案是一次性获取FirebaseDB上的用户集合。
class User {
String firstName, groupID, lastName, pictureURL, userID;
User({this.firstName, this.groupID, this.lastName, this.pictureURL, this.userID});
factory User.fromJSON(Map<dynamic, dynamic> user) => User(firstName: user["Firstname"], groupID: user["Group_id"], lastName: user["Lastname"], pictureURL: user["Picturelink"], userID: user["User_id"]);
}
Future<List<User>> users = Firestore.instance.collection("users").snapshots().asyncMap((users) {
return users.documents.map((user) => User.fromJSON(user.data)).toList();
}).single;