Flutter中Google登录弹窗不显示,点击按钮无响应求助
Flutter Google登录无反应问题排查与修复
核心问题:登录函数未被调用
你的代码在GoogleLogInEvent的处理逻辑中,仅定义了googleLogIn()异步函数,但从未执行调用,导致代码直接跳过登录逻辑走到最后的打印语句,自然不会弹出Google登录弹窗。
修复步骤
调用登录函数并处理异步逻辑
事件处理函数需标记为async,并通过await googleLogIn();执行登录逻辑,同时补充状态发射让UI层感知登录结果:on<GoogleLogInEvent>((event, emit) async { GoogleSignIn googleSignIn = GoogleSignIn(); GoogleSignInAccount? _user; Future googleLogIn() async { try { final googleUser = await googleSignIn.signIn(); if (googleUser == null) { print("NO GOOGLE USER"); return null; } _user = googleUser; final googleAuth = await googleUser.authentication; final credential = GoogleAuthProvider.credential( accessToken: googleAuth.accessToken, idToken: googleAuth.idToken, ); await FirebaseAuth.instance.signInWithCredential(credential); // 登录成功发射成功状态 emit(GoogleSignInSuccess(user: _user)); } catch (e) { print("THERE IS AN ERROR IN LOGIN: ${e.toString()}"); // 登录失败发射错误状态 emit(GoogleSignInFailure(error: e.toString())); } } // 调用登录函数 await googleLogIn(); print("GOOGLE SIGN IN: ${googleSignIn.clientId}"); });优化实例创建逻辑
将GoogleSignIn实例提升为Bloc成员变量,避免每次事件触发重复创建:class GoogleSignInBloc extends Bloc<GoogleSignInEvent, GoogleSignInState> { final GoogleSignIn _googleSignIn = GoogleSignIn(); GoogleSignInBloc() : super(GoogleSignInInitial()) { on<GoogleLogInEvent>((event, emit) async { GoogleSignInAccount? _user; Future googleLogIn() async { try { final googleUser = await _googleSignIn.signIn(); // 其余登录逻辑不变 } catch (e) { // 错误处理不变 } } await googleLogIn(); print("GOOGLE SIGN IN: ${_googleSignIn.clientId}"); }); // 修复登出逻辑:直接执行登出操作,无需嵌套函数 on<GoogleLogOutEvent>((event, emit) async { await _googleSignIn.disconnect(); await FirebaseAuth.instance.signOut(); emit(GoogleSignInInitial()); }); } }确认平台配置正确性
- Android:确保
android/app/google-services.json文件配置了正确的OAuth客户端ID,且放置位置正确 - iOS:在
Info.plist中添加对应Google登录客户端ID的URL Scheme
- Android:确保
内容的提问来源于stack exchange,提问作者Srasti Verma
相关产品推荐
相关产品推荐

