Flutter Firebase Google登录时用户未选择账号无响应问题求助
Flutter Firebase Google登录时用户未选择账号无响应问题求助
我太懂这种卡壳的糟心感了!之前做Flutter Firebase Google登录时也踩过一模一样的坑——用户点开账号选择弹窗后,要是按返回键关掉弹窗,GoogleSignIn().signIn()就像“隐身”了一样,完全没反馈,整个流程僵住不动。
其实问题根源很简单:当用户主动关闭账号选择弹窗时,GoogleSignIn().signIn()不会抛出异常,而是直接返回null,但你的代码里完全没处理这个null场景,导致后续逻辑根本没触发,自然就出现了“无响应”的假象。
给你调整后的代码,重点补上了用户取消登录的处理逻辑:
Future<String> signInWithGoogle() async { String res = "Something went wrong"; // 触发登录流程 final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn(); // 新增:处理用户取消登录的核心逻辑 if (googleUser == null) { return "用户取消登录"; } // 获取登录认证信息 final GoogleSignInAuthentication? googleAuth = await googleUser.authentication; // 创建登录凭证 final credential = GoogleAuthProvider.credential( accessToken: googleAuth?.accessToken, idToken: googleAuth?.idToken, ); if (credential == null) { return "获取登录凭证失败"; } try { UserCredential cred = await _auth.signInWithCredential(credential); res = "Success"; } catch (err) { res = err.toString(); print(err); } return res; }
几个关键改进点:
- 在拿到
googleUser的第一时间判断是否为null,一旦确认是用户取消登录,直接返回明确提示,让调用方可以立刻给用户反馈(比如弹出“已取消Google登录”的提示) - 顺手修正了代码里的拼写错误(
worng→wrong、模糊的some thing→明确的“获取登录凭证失败”),让返回信息更清晰
这样修改后,不管用户是完成登录还是中途取消,你的方法都会给出明确的结果,再也不会出现无响应的情况啦!
备注:内容来源于stack exchange,提问作者love Life
相关产品推荐
相关产品推荐

