Flutter集成Google登录报错:Concurrent operations detected等问题求助
解决Flutter Google登录中"Concurrent operations detected"异常
问题核心分析
异常提示java.lang.IllegalStateException: Concurrent operations detected: signIn, disconnect明确说明:你的应用正在同时触发**登录(signIn)和断开连接(disconnect)**两个操作,而google_sign_in插件不允许并发执行这类操作,这是导致崩溃的直接原因。
修复步骤
- 排查并发调用逻辑:检查代码中是否存在调用
signIn()的同时,未等待其完成就触发disconnect()的情况,比如登录按钮点击事件中意外执行了断开连接的代码。 - 添加加载状态拦截重复操作:在登录按钮点击后设置加载标记,禁用按钮或拦截重复点击,避免用户多次触发操作引发并发问题。示例代码:
bool _isLoading = false; Future<void> handleGoogleLogin() async { if (_isLoading) return; _isLoading = true; try { final GoogleSignInAccount? account = await GoogleSignIn().signIn(); // 处理登录成功逻辑 } catch (e) { // 处理登录失败逻辑 } finally { _isLoading = false; } } - 规范异步操作流程:确保所有
google_sign_in的异步方法都通过await等待执行完成后,再发起下一个相关操作。 - 区分
signOut与disconnect的使用场景:如果只是切换用户,使用signOut()即可;disconnect()是用来撤销应用对用户Google账户的访问权限,通常不需要在登录流程中调用。 - 更新插件版本:确认使用的
google_sign_in插件为最新版本,部分并发问题可能已在后续更新中修复。
补充说明
日志中的handleWindowVisibility: no activity for token警告通常是并发操作导致的次生问题,解决并发调用后该警告会随之消失。
内容的提问来源于stack exchange,提问作者chetan koppal
相关产品推荐
相关产品推荐

