Проблема с ‘FirebaseUser’ в будущем

#firebase #flutter #firebase-authentication #google-signin

#firebase #сбой #firebase-аутентификация #google-вход

Вопрос:

У меня возникла проблема с реализацией входа в Google с помощью Firebase в новом проекте, в котором говорится, что выражение не вычисляется для функции. Код работал в других моих проектах за последний год. Вот мой код:

 class FirebaseAuthService {
  final FirebaseAuth _firebaseAuth;
  final GoogleSignIn _googleSignIn;

  FirebaseAuthService({FirebaseAuth firebaseAuth, GoogleSignIn googleSignin})
      : _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance,
        _googleSignIn = googleSignin ?? GoogleSignIn();

  Account _userFromFirebase(User user) {
    if (user == null) {
      return null;
    }
    return Account(
      uid: user.uid,
      email: user.email,
      displayName: user.displayName,
      photoUrl: user.photoURL,
    );
  }

  Stream<Account> get onAuthStateChanged {
    return _firebaseAuth.onAuthStateChanged.map(_userFromFirebase);
  }

  Future<Account> signInAnonymously() async {
    final authResult = await _firebaseAuth.signInAnonymously();
    return _userFromFirebase(authResult.user);
  }

  Future<Account> signInWithGoogle() async {
    final googleUser = await _googleSignIn.signIn();
    final googleAuth = await googleUser.authentication;
    final credential = GoogleAuthProvider.credential(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );
    final authResult = await _firebaseAuth.signInWithCredential(credential);
    return _userFromFirebase(authResult.user);
  }

  Future<void> signOut() async {
    return _firebaseAuth.signOut();
  }

  Future<Account> currentUser() async {// The Issue is here in the Future<>
    final user = await _firebaseAuth.currentUser();
    return _userFromFirebase(user);
  }
}
  

Комментарии:

1. Пожалуйста, отредактируйте вопрос, чтобы более четко указать, в чем проблема, и полное сообщение об ошибке.

Ответ №1:

В последней версии firebase_auth (0.18.0 1) нет currentUser функции, и она не возвращает Future . Во многих пакетах FlutterFire были внесены серьезные критические изменения, которые могли изменить этот синтаксис, и вы, вероятно, обновили свои пакеты, не просматривая список изменений для этих критических изменений.

Получение currentUser теперь изменено на средство получения и больше не возвращает Future .

currentUser Функция должна быть изменена следующим образом:

 Account currentUser() {
  final user = _firebaseAuth.currentUser;
  return _userFromFirebase(user);
}