Clase indefinida 'FirebaseUser'

Aug 19 2020

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

37 PeterHaddad Aug 19 2020 at 14:51

A partir de la versión firebase_auth0.18.0:

En la versión más reciente de firebase_auth, la clase FirebaseUserse cambió a Usery la clase AuthResultse 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;
    }

FirebaseUsercambiado aUser

AuthResultcambiado aUserCredential

GoogleAuthProvider.getCredential()cambiado aGoogleAuthProvider.credential()


onAuthStateChangedque 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 currentUsery 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 UserUpdateInfola clase para el firebaseUser.updateProfilemé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();
}
1 sleepingkit Aug 19 2020 at 14:50

Correr

flutter pub get

Luego reconstruya su aplicación.

1 PrathamSarankar Sep 17 2020 at 02:14

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;
        });
      }
    }
  }
1 Maann Oct 28 2020 at 13:34

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

ChamodDissanayake Feb 04 2021 at 21:11

Dado que firebase_auth 0.18.0la clase FirebaseUserse cambió aUser