我/颤振(18793):PlatformException(network_error,com.google.android.gms.common.api.ApiException:7:,null,null)

问题描述 投票:0回答:2

我正在研究我的 flutter 项目的身份验证部分。 我想在手机未连接互联网时对登录进行异常处理。该应用程序有3个身份验证提供者:电话、GoogleSignIn和电子邮件。对于使用显示错误消息的 FirebaseException 的电话登录和电子邮件登录,错误消息会正确显示。 但是对于 GoogleSignIn,如果设备未连接到互联网,则代码会失败:

final GoogleSignInAccount? googleUser = await googleSignIn.signIn();
由于此时执行失败,我认为 FirebaseAuthException 不起作用,因为 googleSignIn 不支持它。

FirebaseAuthException 不起作用,但只有“Exception”起作用。 而且我在警报对话框中使用异常时没有收到正确的错误消息。

带有异常处理的电子邮件登录代码。

Future<void> signInWithEmailAndPassword( String email, String password, void Function(FirebaseAuthException e) errorCallback, ) async { try { await FirebaseAuth.instance.signInWithEmailAndPassword( email: email, password: password, ); } on FirebaseAuthException catch (e) { errorCallback(e); } }

在 errorCallback(e) 中调用的错误对话框

void _showErrorDialog(BuildContext context, String title, Exception e) { showDialog<void>( context: context, builder: (context) { return AlertDialog( title: Text( title, style: const TextStyle(fontSize: 24), ), content: SingleChildScrollView( child: ListBody( children: <Widget>[ Text( '${(e as dynamic).message}', style: const TextStyle(fontSize: 18), ), ], ), ), actions: <Widget>[ ElevatedButton(onPressed: () { Navigator.of(context).pop(); }, child: const Text('OK', style: TextStyle(color: Colors.deepPurple), ),) ], ); }, ); }
使用 FirebaseAuthException 进行电子邮件的异常处理

使用 FirebaseAuthException 进行电子邮件异常处理


谷歌登录

Future<void> signInWithGoogle ( void Function(Exception e) errorCallback, ) async { try{ final GoogleSignInAccount? googleUser = await googleSignIn.signIn(); final GoogleSignInAuthentication? googleAuth = await googleUser!.authentication; final credential = GoogleAuthProvider.credential( accessToken: googleAuth!.accessToken, idToken: googleAuth.idToken, ); await FirebaseAuth.instance.signInWithCredential(credential); } on Exception catch (e) { print(e); errorCallback(e); } }

使用 Exception 而不是 FirebaseAuthException 进行 google 登录的异常处理

控制台打印错误 我/颤振(4383):PlatformException(network_error,com.google.android.gms.common.api.ApiException:7:,null,null)

P.S 我只想在警报对话框中显示正确的网络错误,而不是“ com.google.android.gms.common.api.ApiException: 7”

firebase flutter firebase-authentication google-signin
2个回答
2
投票
更新

由于在

FirebaseAuthException

 处执行失败,因此未调用 
GoogleSignIn
,因此无法使用 
FirebaseAuthException

虽然日志中打印的错误是

PlatformException

,但我们可以在try catch块中使用
PlatformException
代替
Exception
,并检查
错误代码,因为它受PlatformException
支持。

错误代码可以与

GoogleSignIn.kNetworkError

GoogleSignIn.kSignInFailedError
进行比较。

Future<void> signInWithGoogle ( void Function(String errorMessage) errorCallback, ) async { try { final GoogleSignInAccount? googleUser = await googleSignIn.signIn(); final GoogleSignInAuthentication? googleAuth = await googleUser!.authentication; final credential = GoogleAuthProvider.credential( accessToken: googleAuth!.accessToken, idToken: googleAuth.idToken, ); await FirebaseAuth.instance.signInWithCredential(credential); } on PlatformException catch (e) { if (e.code == GoogleSignIn.kNetworkError) { String errorMessage = "A network error (such as timeout, interrupted connection or unreachable host) has occurred."; errorCallback(errorMessage); } else { String errorMessage = "Something went wrong."; errorCallback(errorMessage); } } }

截图


0
投票
错误:[错误:flutter/runtime/dart_vm_initializer.cc(41)] 未处理的异常:PlatformException(network_error,com.google.android.gms.common.api.ApiException:7:,null,null)

解决方案:

确保您有有效的互联网连接,(网络错误表明您没有连接到互联网或没有稳定的网络连接)

© www.soinside.com 2019 - 2024. All rights reserved.