如何从Flutter Firebase实时数据库读取数据?

时间:2019-07-19 10:37:50

标签: flutter dart

我在此设置中使用了实时数据库:

->users
->uid
    ->name
    ->email
    ->other info

如果要保存用户数据,可以使用User类,然后按如下所示在数据库中设置对象:

final FirebaseUser user = await FirebaseAuth.instance.currentUser(); FirebaseDatabase.instance.reference().child("kullanıcılar").child(user.uid).child("takip").set({"uid":"uid"});

我尝试过了,效果很好。

但是如何从数据库中检索这些值?例如,一旦我设置了上面所示的User对象,我可能想要检索用户的电子邮件。我并不是说要通过登录提供商获取电子邮件。我希望通过实时数据库发送电子邮件。我已经尝试了一段时间,但是文档并没有太大帮助。它显示的全部内容是设置侦听器,以等待数据更改。但是我不等待变化,我不想要听众。我想通过使用JSON树中的键直接获取数据库中的值。是否可以通过实时数据库进行?如果是这样,该怎么办,因为文档没有解释它,或者我只是不理解它。谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用.once()一次检索值。这是一个示例:https://github.com/flutter/plugins/blob/master/packages/firebase_database/example/lib/main.dart#L62

或更好,使用async / await:

Future<String> getEmail() async {
  String result = (await FirebaseDatabase.instance.reference().child("path/to/user/record/email").once()).value;
  print(result);
  return result;
}

答案 1 :(得分:0)

您无法从firebase中检索单个值,它总是返回整个记录的DocumentSnapshot。您可以使用以下用户ID从用户表中获得一条记录:

getData() async {
  final FirebaseUser user = await _firebaseAuth.currentUser();
  return await FirebaseDatabase.instance.reference().child('user').equalTo(user.uid);
}

像这样获得它:

getData().then((val){
    print(val.email);
});