Flutter 用户取消登录流时如何处理平台异常
当用户按“取消”而不是使用谷歌登录窗口登录时,我无法处理平台异常 我甚至尝试了一个if语句,以便在sign返回null时不运行,但这也不起作用Flutter 用户取消登录流时如何处理平台异常,flutter,google-signin,Flutter,Google Signin,当用户按“取消”而不是使用谷歌登录窗口登录时,我无法处理平台异常 我甚至尝试了一个if语句,以便在sign返回null时不运行,但这也不起作用 Future<void> _handleSignIn() async { try { await googleSignIn.signIn(); } catch (error) { print(error); } } Future\u handleSignIn()异步{ 试一试{ 等待谷歌签名; }捕获(错误){
Future<void> _handleSignIn() async {
try {
await googleSignIn.signIn();
} catch (error) {
print(error);
}
}
Future\u handleSignIn()异步{
试一试{
等待谷歌签名;
}捕获(错误){
打印(错误);
}
}
您可以简单地捕获错误
如-
Future<void> _handleSignIn() async {
await googleSignIn.signIn().catchError((e) {
print(e);
});
}
Future\u handleSignIn()异步{
等待googleSignIn.signIn().catchError((e){
印刷品(e);
});
}
在使用谷歌进行身份验证时,不太明显的是,该过程包括三个步骤
\u googleSignIn.signIn()
//提示窗口googleAccount.authentication
//获取凭据\u auth.signInWithCredential(凭证)
//实际的身份验证 // https://github.com/flutter/flutter/issues/26705
Future<FirebaseUser> signInWithGoogle() async {
FirebaseUser user;
var errorMessage;
try {
GoogleSignInAccount googleAccount = await _googleSignIn.signIn();
if (googleAccount == null) {
errorMessage = "CANCELLED_SIGN_IN";
return Future.error(errorMessage);
}
GoogleSignInAuthentication googleAuthentication = await googleAccount.authentication;
AuthCredential credential = GoogleAuthProvider.getCredential(
idToken: googleAuthentication.idToken,
accessToken: googleAuthentication.accessToken,
);
AuthResult authResult = await _auth.signInWithCredential(credential);
user = authResult.user;
return user;
}
catch(error) {
switch (error.code) {
case "ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL":
errorMessage = "Account already exists with a different credential.";
break;
case "ERROR_INVALID_CREDENTIAL":
errorMessage = "Invalid credential.";
break;
case "ERROR_INVALID_EMAIL":
errorMessage = "Your email address appears to be malformed.";
break;
case "ERROR_WRONG_PASSWORD":
errorMessage = "Your password is wrong.";
break;
case "ERROR_USER_NOT_FOUND":
errorMessage = "User with this email doesn't exist.";
break;
case "ERROR_USER_DISABLED":
errorMessage = "User with this email has been disabled.";
break;
case "ERROR_TOO_MANY_REQUESTS":
errorMessage = "Too many requests. Try again later.";
break;
case "ERROR_OPERATION_NOT_ALLOWED":
errorMessage = "Signing in with Email and Password is not enabled.";
break;
default:
errorMessage = "An undefined Error happened. ";
}
}
if (errorMessage != null) {
return Future.error(errorMessage);
}
return null;
}
//https://github.com/flutter/flutter/issues/26705
使用Google()异步{
FirebaseUser用户;
var错误消息;
试一试{
GoogleSignInAccount googleAccount=等待_googleSignIn.signIn();
如果(googleAccount==null){
errorMessage=“已取消登录”;
返回Future.error(错误消息);
}
GoogleSignInAuthentication googleAuthentication=等待googleAccount.authentication;
AuthCredential credential=GoogleAuthProvider.getCredential(
idToken:googleAuthentication.idToken,
accessToken:googleAuthentication.accessToken,
);
AuthResult AuthResult=wait _auth.signwithcredential(凭证);
user=authResult.user;
返回用户;
}
捕获(错误){
开关(错误代码){
案例“错误\u帐户\u存在\u且凭据不同”:
errorMessage=“已存在具有不同凭据的帐户。”;
打破
案例“错误\u无效\u凭证”:
errorMessage=“无效凭证。”;
打破
案例“错误\u无效\u电子邮件”:
errorMessage=“您的电子邮件地址似乎格式不正确。”;
打破
案例“错误\错误\密码”:
errorMessage=“您的密码错误。”;
打破
案例“错误用户未找到”:
errorMessage=“发送此电子邮件的用户不存在。”;
打破
案例“错误用户禁用”:
errorMessage=“此电子邮件的用户已被禁用。”;
打破
案例“错误请求太多”:
errorMessage=“请求太多。请稍后再试。”;
打破
案例“错误操作不允许”:
errorMessage=“未启用使用电子邮件和密码登录。”;
打破
违约:
errorMessage=“发生了未定义的错误。”;
}
}
如果(errorMessage!=null){
返回Future.error(错误消息);
}
返回null;
}
还有谷歌按钮
GoogleSignInButton(
onPressed: () async {
var isError = false;
var authService = Provider.of<AuthService>(context, listen: false);
await authService.signInWithGoogle().catchError((errorMessage) async {
isError = true;
if (errorMessage != 'CANCELLED_SIGN_IN') {
await showPopup(context, title: 'Validation', child: Text(errorMessage));
}
});
if (isError == false) {
Navigator.pushReplacementNamed(context, HomeScreen.routeName);
}
},
),
谷歌登录按钮(
onPressed:()异步{
var-isError=false;
var authService=Provider.of(上下文,侦听:false);
等待authService.signInWithGoogle().catchError((errorMessage)异步{
isError=真;
如果(errorMessage!=“已取消登录”){
等待showPopup(上下文,标题:“验证”,子项:文本(errorMessage));
}
});
if(isError==false){
Navigator.pushReplacementNamed(上下文,主屏幕.routeName);
}
},
),
您确定取消登录时会捕获异常,因为我看到它仍然会抛出最新版本谷歌登录的异常吗
GoogleSignInButton(
onPressed: () async {
var isError = false;
var authService = Provider.of<AuthService>(context, listen: false);
await authService.signInWithGoogle().catchError((errorMessage) async {
isError = true;
if (errorMessage != 'CANCELLED_SIGN_IN') {
await showPopup(context, title: 'Validation', child: Text(errorMessage));
}
});
if (isError == false) {
Navigator.pushReplacementNamed(context, HomeScreen.routeName);
}
},
),