Flutter Firebase RTDB:从Firebase实时数据库读取数据时,Push ID是强制性的吗



我当前的实验:

  1. 我希望用户登录并输入详细信息
  2. 下次他登录时,我想检索他保存的信息

我想要的数据库结构:
-"用户
------"uid";
-----------firstName
-----------姓氏`

我在flutter中使用以下代码来创建记录:

await FirebaseAuth.instance.signInWithEmailAndPassword( email: email, password: 
password).then((value)
{
if(value.user.uid != null ) 
{
final dbRef = FirebaseDatabase.instance.reference().child('users');
dbRef.push().child(user.uid.toString()).set(User().toJson());
}
}

数据是用一个介于两者之间的按键/ID创建的:

-users
------MFvvXpeRmoQvXkd5VS8 `<---Push ID generated by Firebase`
--------------k8IL4xLQKRf82dxlXNLSHEt2
-----------------------firstName: "sadsadda"
------------------------lastName: "asdsadsad"`

基于文档,当我尝试使用以下代码检索数据时:

final dbRef = FirebaseDatabase.instance.reference().child('users').child(user.uid.toString());
dbRef.equalTo(user.uid.toString()).once().then((snapshot) 
{
/*snapshot has value null
}
);

//I even added listener<br>
dbRef.onChildAdded.listen((event) {
readUserInfo(event.snapshot); // even here snapshot value is null.
});

只是为了测试的目的,我试图通过硬编码来传递中间的按键

final dbRef = FirebaseDatabase.instance.reference().child('users').child('- 
MFvvXpeRmoQvXkd5VS8').child(user.uid.toString());`

那么";onChildAdded";监听器能够拾取子条目。这是预期的行为吗?或者有没有办法避免这种随机生成的推送id?

感谢您提前花时间

要在UID下写入用户数据,不要调用push(),只需调用:

dbRef.child(user.uid.toString()).set(User().toJson());

要为用户回读数据,请使用:

final dbRef = FirebaseDatabase.instance.reference().child('users').child(user.uid.toString());
dbRef.onValue.listen((event) {
readUserInfo(event.snapshot);
});

当您想要读取子节点的列表时,需要.childAdded,例如读取所有用户:

final dbRef = FirebaseDatabase.instance.reference().child('users');
dbRef.onChildAdded.listen((event) {
readUserInfo(event.snapshot);
});

最新更新