在GoogleSignIn中无法捕获Flutter异常

时间:2020-03-04 20:29:49

标签: flutter dart firebase-authentication

我正在尝试在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()行上抛出异常

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

1 个答案:

答案 0 :(得分:0)

我发现您的示例代码及其.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) {
  ...
}