首页 > 解决方案 > 无法在 GoogleSignIn 中捕获 Flutter 异常

问题描述

我正在尝试在 Flutter 应用程序中实现 Google 登录,但我尝试捕获的所有异常都没有被捕获。我不知道为什么。我尝试了不同的方法来捕捉它们,但没有。

这是我的代码:

Future signInWithGoogle() async {
    GoogleSignInAccount googleSignInAccount;
    try {
      googleSignInAccount = await googleSignIn.signIn().then((res) {
        print("success");
        return null;
      }, onError: (e) {
        print("${e.toString()}");
        return null;
      });
    } catch (err) {
      print("${err.toString()}");
    }
    final GoogleSignInAuthentication googleSignInAuthentication =
        await googleSignInAccount.authentication;

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

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

    assert(!user.isAnonymous);
    assert(await user.getIdToken() != null);

    final FirebaseUser currentUser = await _auth.currentUser();
    assert(user.uid == currentUser.uid);

    return 'signInWithGoogle succeeded: $user';
  }

异常总是在线抛出googleSignInAccount = await googleSignIn.signIn()

如您所见,我尝试以多种方式捕获异常,但它们都没有真正起作用。

标签: flutterdartfirebase-authentication

解决方案


我发现您的示例代码及其.then调用存在问题...

googleSignInAccount = await googleSignIn.signIn().then((res) {
        print("success");
        return null;
      }, onError: (e) {
        print("${e.toString()}");
        return null;
      });

你不能同时做一个await和一个.then通常它的一个或另一个。为了使 try/catch 起作用,请删除.then

try {
    googleSignInAccount = await googleSignIn.signIn();
} catch(err) {
  ...
}

推荐阅读