我有一个给我错误的函数。
getCurrentOnLineUserInfo
函数正在尝试从当前登录用户的 Firebase 数据库中读取数据。
The argument type 'Null Funcion(DataSnapshot)' can't be assigned to the parameter of type 'Future Or Function(DataBaseEvent)'
我正在学习一年前的教程,所以问题可能是代码太旧了。我可能需要新语法或其他东西。
static void getCurrentOnLineUserInfo() async {
firebaseUser = await FirebaseAuth.instance.currentUser;
String userId = firebaseUser!.uid;
DatabaseReference reference =
FirebaseDatabase.instance.ref().child("user").child(userId);
print("getCurrentOnLineUser info executed!");
print('${firebaseUser!.email}${firebaseUser!.displayName}');
// errors below this
reference.once().then((DataSnapshot dataSnapshot) {
if (dataSnapShot!.value != null) {
userCurrentInfo = Users.fromSnapshot(dataSnapshot);
}
});
}
}
这是我正在分配数据的类(class)。这个类没有给出错误
class Users {
String? id;
String? email;
String? phone;
String? name;
Users({this.id, this.email, this.phone, this.name});
Users.fromSnapshot(DataSnapshot dataSnapshot) {
id = dataSnapshot.key!;
var data = dataSnapshot.value as Map?;
if (data != null) {
email = data?["email"];
name = data?["name"];
phone = data?["phone"];
}
}
}
最佳答案
once
方法返回一个 DatabaseEvent
,而不是一个 DataSnapshot
。 DatabaseEvent
是一个类,封装了一个DataSnapshot
AND一个DatabaseEventType
,要提取快照,必须使用数据库事件.快照
:
reference.once().then((event) {
final dataSnapshot = event.snapshot;
if (dataSnapShot!.value != null) {
userCurrentInfo = Users.fromSnapshot(dataSnapshot);
}
});
这是我认为可以满足您要求的另一种解决方案:
// async methods should return a future
static Future<void> getCurrentOnLineUserInfo() async {
firebaseUser = await FirebaseAuth.instance.currentUser;
String userId = firebaseUser!.uid;
DatabaseReference reference =
FirebaseDatabase.instance.ref().child("user").child(userId);
final snapshot = await reference.get(); // you should use await on async methods
if (snapshot!.value != null) {
userCurrentInfo = Users.fromSnapshot(snapshot);
}
}
}
关于firebase - argumnet 类型 'Null Funcion(DataSnapshot)' 不能分配给参数类型 'Future Or <dynamic> Function(DataBaseEvent)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70585172/