Firebase.instance.signOut () не устанавливает для currentUser () значение null - PullRequest
0 голосов
/ 17 января 2020

Почему мой метод signOut () не устанавливает для currentUser () значение null?

Когда я нажимаю на выход из системы на моей домашней странице, он проверяет метод isAuthenticated (), который возвращает пользователя вместо нуля. Также взгляните на два комментария, которые я включил в метод logout (). Спасибо !!

Вот мой код -

class Auth with ChangeNotifier {
  final FirebaseAuth _auth = FirebaseAuth.instance;
  final GoogleSignIn _googleSignIn = GoogleSignIn();

  bool isAuthenticated() {
    print('$currentUser inside the isAuthenticated');
    if (currentUser == null) {
      print('false');
      return false;
    }
    print('true');
    return true;
  }

  Future<FirebaseUser> get currentUser async {
    return await _auth.currentUser();
  }


  Future<FirebaseUser> signInWithEmail(String email, String password) async {
    try {
      final response = await _auth.signInWithEmailAndPassword(
        email: email,
        password: password,
      );
      print(response);

      if (response == null) {
        print('response is null');
      } else {
        notifyListeners();
        return response.user;
      }
    } catch (error) {
      print('some error');
      throw error;
    }
  }

  Future<FirebaseUser> signInWithGoogle() async {
    try {
      final GoogleSignInAccount _userDetails = await _googleSignIn.signIn();
      if (_userDetails == null) {
        print('No user found');
      } else {
        final GoogleSignInAuthentication googleAuth =
            await _userDetails.authentication;

        final AuthCredential credential = GoogleAuthProvider.getCredential(
          accessToken: googleAuth.accessToken,
          idToken: googleAuth.idToken,
        );

        final FirebaseUser user =
            (await _auth.signInWithCredential(credential)).user;

        return user;
      }
      notifyListeners();
      print('google sign in ran successfully');
    } catch (error) {
      throw error;
    }
  }

  Future<FirebaseUser> logout() async {
    try {
      print('logout ran');
      print(currentUser);       //THIS RETURNS AN INSTANCE OF USER
      _auth.signOut().then( (response) {
        print('signout successful');
      });

      await _googleSignIn.signOut();
      print(currentUser);     //THIS *ALSO* RETURNS AN INSTANCE OF USER
      notifyListeners();
      return currentUser;
    } catch (error) {
      print('an error');
    }
  }
}

Я знаю, что будет глупая ошибка, которую я не могу поймать, но это утомительно сейчас !! Я пробовал другие методы, которые я мог найти на stackoverflow

1 Ответ

0 голосов
/ 17 января 2020

Может быть, будущее не закончено, когда вы пытаетесь получить текущего пользователя, вы пытались подождать вместо выхода из системы?

Future<FirebaseUser> logout() async {
    try {
      print('logout ran');
      print(currentUser);       //THIS RETURNS AN INSTANCE OF USER
      await _auth.signOut();

      await _googleSignIn.signOut();
      //The problem is with this, you need to await this
      //print(currentUser);     //THIS *ALSO* RETURNS AN INSTANCE OF USER
      var user = await currentUser;
      print(user); //prints null
      notifyListeners();
      return currentUser;
    } catch (error) {
      print('an error');
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...