Flutter Google 登录错误未被捕获

Posted

技术标签:

【中文标题】Flutter Google 登录错误未被捕获【英文标题】:Flutter Google Sign In Error Not Being Caught 【发布时间】:2020-10-31 02:19:55 【问题描述】:

我正在使用 google 登录和 firebase 将身份验证集成到我的应用中。但是我面临的问题是,当我取消登录时(在我关闭弹出窗口的意义上),我得到一个

PlatformException (PlatformException(sign_in_canceled, com.google.GIDSignIn, The user canceled the sign-in flow.))

据我所知,这应该会发生,尽管我面临的问题是我无法捕捉到错误。以下是我尝试捕获此错误的几种方法:

Future loginWithGoogle() async 
    final GoogleSignIn googleSignIn = GoogleSignIn();
    var account;

    try 
      account = await googleSignIn.signIn();
     on PlatformException catch (e) 
      print('\n\n\n\n\n AN ERROR OCCURED \n\n\n\n\n');
      print(e.message);
    

    final AuthResult result = await _auth
        .signInWithCredential(GoogleAuthProvider.getCredential(
            idToken: (await account.authentication).idToken, accessToken: (await account.authentication).accessToken));
    setState(() 
      _firestore.collection('Users').document('$result.user.uid').setData(
        'Profile Picture': result.user.photoUrl,
        'Name': result.user.displayName,
        'Email ID': result.user.email,
        'Phone Number': result.user.phoneNumber,
      );
      isAuthenticating = true;
    );
    if (result.user.phoneNumber == null) 
      Navigator.pushReplacement(
        context,
        MaterialPageRoute(
          builder: (context) => PhoneRegistrationScreen(
            result: result,
          ),
        ),
      );
    
  

发生错误时不打印任何内容。 我还尝试使用 catchError() 回调来捕获错误:

account = await googleSignIn.signIn().catchError((error) 
      print('AN ERROR OCCURED');
    );

同样,发生错误时它不会打印任何内容。

非常感谢大家,非常感谢您的帮助!

【问题讨论】:

发布错误的整个堆栈跟踪 【参考方案1】:

我已经修复了这个错误,并且我发现.catchError() 回调没有在调试模式下被调用(当你点击 VSCode 中的Run->Start Debugging 按钮时)。

但是,当您输入 flutter run -d 时,.catchError() 方法将被回调,因为它未处于调试模式。

要获取您喜欢的模拟器的代码,请将这行代码粘贴到终端中:

instruments -s devices

如果这不起作用,您也可以尝试粘贴:

xcrun simctl list

.catchError() 方法将与以前不同地被调用,其中的代码将按预期执行!

此外,应用程序不会再因PlatformException() 而崩溃,而是您会得到这样的日志:

[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: NoSuchMethodError: The getter 'uid' was called on null.
Receiver: null

我在 Google 登录中也遇到过这个问题,.catchError() 没有被调用!

总之,如果你在处理 Firebase Authentication 的错误时遇到了一些错误,你应该首先尝试通过终端运行。谢谢,我希望这会有所帮助!

【讨论】:

以上是关于Flutter Google 登录错误未被捕获的主要内容,如果未能解决你的问题,请参考以下文章

使用 Flutter 登录 Google:错误代码 -4

使用 Flutter,如何在单独的登录页面小部件中显示在 AuthService 类中捕获的 Firebase Auth 错误消息?

在 Flutter 中捕获云 Firestore 文档快照错误

在 Flutter 中使用 Google 登录的错误 403 受限客户端

Flutter Firebase Android/ios Google 登录错误

Google 登录 API 挂起并出现未捕获的错误无法从 URL 哈希获取父源