Flutter Firebase登录报错:'displayName != null'断言失败求助
解决Flutter Google登录时的
displayName != null断言失败问题 这个问题我之前也碰到过,核心原因很明确:部分Google账号未设置公开显示名称,或者你的登录请求没有获取用户基本信息的权限,导致GoogleSignInAccount里的displayName为null,而旧版本的google_sign_in包有严格的非空断言检查,直接触发了错误。下面给你几个可行的解决办法:
1. 升级google_sign_in包到最新稳定版
新版本的google_sign_in已经移除了这个强制非空的断言,允许displayName为null。你只需要修改pubspec.yaml里的依赖:
dependencies: google_sign_in: ^5.4.0 # 替换成当前最新稳定版本
然后执行flutter pub get更新依赖,重新运行项目即可。
2. 手动处理displayName为null的情况(适合无法升级包的场景)
如果暂时不能升级依赖,或者升级后仍有个别账号出现这个问题,可以在代码里提前处理null值,同时确保请求了必要的权限:
Future<User?> _handleSignIn() async { // 初始化时添加scopes,确保请求用户邮箱和基本信息权限 final GoogleSignIn _googleSignIn = GoogleSignIn(scopes: ['email', 'profile']); GoogleSignInAccount? googleUser = await _googleSignIn.signIn(); if (googleUser == null) { // 用户取消了登录流程,直接返回 return null; } // 给displayName设置默认值,避免null String safeDisplayName = googleUser.displayName ?? '匿名用户'; // 后续获取认证信息并登录Firebase GoogleSignInAuthentication googleAuth = await googleUser.authentication; AuthCredential credential = GoogleAuthProvider.credential( accessToken: googleAuth.accessToken, idToken: googleAuth.idToken, ); UserCredential userCredential = await FirebaseAuth.instance.signInWithCredential(credential); return userCredential.user; }
3. 检查Firebase控制台配置
别忘了确认你的Firebase项目里已经正确配置了Android的SHA-1指纹,并且OAuth 2.0客户端ID已经生成。如果配置有误,也可能导致用户信息无法正常获取。
内容的提问来源于stack exchange,提问作者A J
相关产品推荐
相关产品推荐

