You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中Google登录弹窗不显示,点击按钮无响应求助

Flutter Google登录无反应问题排查与修复

核心问题:登录函数未被调用

你的代码在GoogleLogInEvent的处理逻辑中,仅定义了googleLogIn()异步函数,但从未执行调用,导致代码直接跳过登录逻辑走到最后的打印语句,自然不会弹出Google登录弹窗。

修复步骤

  1. 调用登录函数并处理异步逻辑
    事件处理函数需标记为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}");
    });
    
  2. 优化实例创建逻辑
    将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());
        });
      }
    }
    
  3. 确认平台配置正确性

    • Android:确保android/app/google-services.json文件配置了正确的OAuth客户端ID,且放置位置正确
    • iOS:在Info.plist中添加对应Google登录客户端ID的URL Scheme

内容的提问来源于stack exchange,提问作者Srasti Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:45:32