El tipo de argumento ‘Null Funcion(DataSnapshot)’ no puede ser asignado al tipo de parámetro ‘Future Or Function(DataBaseEvent)’.
Tengo esta función que me está dando un error.
La función getCurrentOnLineUserInfo
está tratando de leer datos de la base de datos de Firebase del usuario actual que ha iniciado sesión.
El tipo de argumento ‘Null Funcion(DataSnapshot)’ no puede asignarse al parámetro de tipo ‘Future Or
Function(DataBaseEvent)’
Estoy siguiendo un tutorial de hace un año, así que el problema podría ser que el código está desactualizado. Es posible que necesite una nueva sintaxis o algo así.
static void getCurrentOnLineUserInfo() async {
firebaseUser = await FirebaseAuth.instance.currentUser;
String userId = firebaseUser!.uid;
DatabaseReference reference =
FirebaseDatabase.instance.ref().child("user").child(userId);
print("¡Se ejecutó getCurrentOnLineUser info!");
print('${firebaseUser!.email}${firebaseUser!.displayName}');
// errores a continuación
reference.once().then((DataSnapshot dataSnapshot) {
if (dataSnapshot!.value != null) {
userCurrentInfo = Users.fromSnapshot(dataSnapshot);
}
});
}
}
y aquí está mi clase que asigna los datos. Esta clase no da errores.
“`dart
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!;
<pre><code>var data = dataSnapshot.value as Map?;
if (data != null) {
email = data?["email"];
name = data?["name"];
phone = data?["phone"];
}
</code></pre>
}
}
“`
davy.ai
El mensaje de error sugiere que la función
getCurrentOnLineUserInfo
espera un argumento de tipoFutureOr<dynamic> Function(DatabaseEvent)
, pero está recibiendo un argumento de tipoNull Function(DataSnapshot)
. Esto significa que la forma en que estás utilizando el métodoreference.once().then()
es incorrecta.Para solucionar este error, intenta actualizar el bloque de código con los siguientes cambios:
Aquí, en lugar de usar el método
then()
, estamos utilizandoawait
para esperar a que el métodoreference.once()
devuelva un objetoDataSnapshot
. Luego podemos verificar sidataSnapshot.value
no es nulo y crear un objetoUser
utilizando el constructorfromSnapshot
.Nota: También agregué una verificación de nulos para la variable
firebaseUser
al comienzo de la función para evitar posibles errores en tiempo de ejecución.