Неопределенный класс FirebaseUser

Aug 19 2020

Я новичок во Flutter. У меня есть проблема с Firebase Auth / Google Auth The FirebaseUser не определен код:

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

Я также сталкиваюсь с той же проблемой с AuthResult

final AuthResult authResult = await _auth.signInWithCredential(credential);

Ответы

37 PeterHaddad Aug 19 2020 at 14:51

Начиная с версии firebase_auth0.18.0:

В последней версии firebase_authкласс FirebaseUserбыл изменен на User, а класс AuthResultбыл изменен на UserCredentail. Поэтому измените свой код на следующий:

    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 изменился на User

AuthResult изменился на UserCredential

GoogleAuthProvider.getCredential() изменился на GoogleAuthProvider.credential()


onAuthStateChanged который уведомляет об изменении состояния входа пользователя, был заменен на authStateChanges()

currentUser()который является методом получения текущего пользователя, вошедшего в систему, был заменен свойством currentUserи больше не возвращает Future<FirebaseUser>.

Пример двух вышеуказанных методов:

FirebaseAuth.instance.authStateChanges().listen((event) {
   print(event.email);
});

А также:

var user = FirebaseAuth.instance.currentUser;
print(user.uid);

Прекращение использования UserUpdateInfoкласса для firebaseUser.updateProfileметода. Пример:

Future updateName(String name, FirebaseUser user) async {
  var userUpdateInfo = new UserUpdateInfo();
  userUpdateInfo.displayName = name;
  await user.updateProfile(userUpdateInfo);
  await user.reload(); 
}

сейчас

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

Запустить

flutter pub get

Затем перестройте свое приложение.

1 PrathamSarankar Sep 17 2020 at 02:14

Это может быть ваша функция входа с адресом электронной почты и пароля с сентября 2020 г. Приложение Initialze - это новый представленный метод, который мы должны вызвать хотя бы один раз, прежде чем использовать какие-либо другие методы 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

В последней версии firebase_auth класс FirebaseUser был изменен на User , а класс AuthResult был изменен на UserCredentail . Поэтому измените FirebaseUser на User

ChamodDissanayake Feb 04 2021 at 21:11

Поскольку firebase_auth 0.18.0класс FirebaseUserбыл изменен наUser