flutter / firebase数据库中的简单查询

时间:2018-05-23 14:39:07

标签: firebase firebase-realtime-database flutter

我尝试使用flutter体验Firebase Live数据库。 我只想获得firebase响应的数据快照中的值。

我的Firebase

enter image description here

我的代码

scale_y_continuous(breaks=1:2, labels=c("a","b")

我获得了名字的空值。 我想我应该导航到snapshot.value的孩子。但不可能用foreach或Map()来管理......

亲切的问候,杰罗姆

2 个答案:

答案 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;