我当前的实验:
- 我希望用户登录并输入详细信息
- 下次他登录时,我想检索他保存的信息
我想要的数据库结构:
-"用户
------"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);
});