Firebase.instance.signOut() 未将 currentUser() 设置为 null

Abb*_*bas 5 firebase firebase-authentication flutter

为什么我的 signOut() 方法没有将 currentUser() 设置为 null?

当我单击主页上的注销时,它会检查 isAuthenticated() 方法,该方法返回用户而不是 null。另外,看看我在 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');
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我知道会有一个我无法捕捉到的愚蠢错误,但现在很累!!我已经尝试了可以​​在 stackoverflow 上找到的其他方法

dlo*_*ani 0

当您尝试获取当前用户时,未来可能并不完整,您是否尝试过等待而不是注销?

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');
    }
  }
Run Code Online (Sandbox Code Playgroud)