我正在尝试获取已从数据库返回的 child 的 key 。在下面的示例中,我将用户选为 Carlos Sainz,我正在尝试获取“csainz”,但是下面的代码返回“email”。
DatabaseReference keyRef = FirebaseDatabase.instance.reference();
await keyRef.child('users')
.child('email')
.equalTo(userList[0].email) // userList[0].email returns Carlos' email
.once()
.then((DataSnapshot dataSnapshot) {
String newKey = dataSnapshot.key;
print(newKey);
});
这是我的数据库的设置方式:
最佳答案
两个问题:
orderByChild(...)
而不仅仅是child(...)
.现在你的代码是 /users/email
,这是不存在的。您的代码不处理列表,但打印执行查询的位置的键:
users
.所以修复两者看起来像这样:
DatabaseReference keyRef = FirebaseDatabase.instance.reference();
await keyRef.child('users')
.orderByChild('email')
.equalTo(userList[0].email)
.onChildAdded.listen((Event event) {
print('${event.snapshot.key}');
}, onError: (Object o) {
final DatabaseError error = o;
print('Error: ${error.code} ${error.message}');
});
});
您也可以使用.once().then(...)
但随后将转换 dataSnapshot.value
到 map ,并显示该 map 中的键。不检查,但应该是这样的:DatabaseReference keyRef = FirebaseDatabase.instance.reference();
await keyRef.child('users')
.orderByChild('email')
.equalTo(userList[0].email)
.once()
.then((DataSnapshot dataSnapshot) {
String newKey = dataSnapshot.value.keys[0];
print(newKey);
});
关于firebase - 如何使用 Flutter/Dart 在 FirebaseDatabase 中获取值的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62183648/