Clase indefinida 'FirebaseUser'
Soy nuevo en Flutter. Tengo un problema con Firebase Auth/ Google Auth El FirebaseUser no está definido Código:
FirebaseAuth _auth = FirebaseAuth.instance;
GoogleSignIn googleSignIn = GoogleSignIn();
Future<FirebaseUser> currentUser() async { // The Issue is here in the Future<>
final GoogleSignInAccount account = await googleSignIn.signIn();
final GoogleSignInAuthentication authentication =
await account.authentication;
final GoogleAuthCredential credential = GoogleAuthProvider.getCredential(
idToken: authentication.idToken, accessToken: authentication.accessToken);
final AuthResult authResult = await _auth.signInWithCredential(credential);
final FirebaseUser user = authResult.user; // and here as I can't define this FirebaseUser object to return
return user;
}
Pubspec.yml
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.3
firebase_auth: ^0.18.0
location: ^3.0.2
page_transition: ^1.1.6
google_sign_in: ^4.5.1
flutter_facebook_login: ^3.0.0
firebase_database: ^4.0.0
También me enfrento al mismo problema con AuthResult
final AuthResult authResult = await _auth.signInWithCredential(credential);
Respuestas
A partir de la versión firebase_auth
0.18.0:
En la versión más reciente de firebase_auth
, la clase FirebaseUser
se cambió a User
y la clase AuthResult
se cambió a UserCredentail
. Por lo tanto, cambie su código a lo siguiente:
Future<User> currentUser() async {
final GoogleSignInAccount account = await googleSignIn.signIn();
final GoogleSignInAuthentication authentication =
await account.authentication;
final GoogleAuthCredential credential = GoogleAuthProvider.credential(
idToken: authentication.idToken,
accessToken: authentication.accessToken);
final UserCredential authResult =
await _auth.signInWithCredential(credential);
final User user = authResult.user;
return user;
}
FirebaseUser
cambiado aUser
AuthResult
cambiado aUserCredential
GoogleAuthProvider.getCredential()
cambiado aGoogleAuthProvider.credential()
onAuthStateChanged
que notifica sobre los cambios en el estado de inicio de sesión del usuario se reemplazó conauthStateChanges()
currentUser()
que es un método para recuperar el usuario conectado actualmente, se reemplazó con la propiedad currentUser
y ya no devuelve un archivo Future<FirebaseUser>
.
Ejemplo de los dos métodos anteriores:
FirebaseAuth.instance.authStateChanges().listen((event) {
print(event.email);
});
Y:
var user = FirebaseAuth.instance.currentUser;
print(user.uid);
Obsolescencia de UserUpdateInfo
la clase para el firebaseUser.updateProfile
método. Ejemplo:
Future updateName(String name, FirebaseUser user) async {
var userUpdateInfo = new UserUpdateInfo();
userUpdateInfo.displayName = name;
await user.updateProfile(userUpdateInfo);
await user.reload();
}
ahora
import 'package:firebase_auth/firebase_auth.dart' as firebaseAuth;
Future updateName(String name, auth.User firebaseUser) async {
firebaseUser.updateProfile(displayName: name);
await firebaseUser.reload();
}
Correr
flutter pub get
Luego reconstruya su aplicación.
Esta puede ser su función de inicio de sesión con correo electrónico y contraseña a partir de septiembre de 2020. La aplicación Initialze es un nuevo método introducido al que debemos llamar al menos una vez antes de usar cualquier otro método de Firebase.
Future<void> signin() async {
final formState = _formkey.currentState;
await Firebase.initializeApp();
if (formState.validate()) {
setState(() {
loading = true;
});
formState.save();
try {
print(email);
final User user = (await FirebaseAuth.instance
.signInWithEmailAndPassword(email: email, password: password))
.user;
} catch (e) {
print(e.message);
setState(() {
loading = false;
});
}
}
}
En la versión más reciente de firebase_auth, la clase FirebaseUser se cambió a User y la clase AuthResult se cambió a UserCredentail . Por lo tanto, cambie FirebaseUser a Usuario
Dado que firebase_auth 0.18.0
la clase FirebaseUser
se cambió aUser