Flutter中如何显示用户邮箱与ID?原代码失效显示null需修复
解决Flutter中用户邮箱和ID显示null的问题
核心问题
你编写的Please()方法从未被调用,导致监听Firebase用户状态变化的逻辑完全没执行,UserId和UserMail始终保持初始的null值,自然无法正常显示用户信息。
修复步骤
启动状态监听逻辑
在_FyState的initState方法中调用Please(),确保页面初始化时就启动用户状态监听:@override void initState() { super.initState(); Please(); // 触发用户状态监听 }优化用户信息获取逻辑
可以简化代码,直接在initState中设置监听,或者直接获取当前已登录用户(不需要实时监听状态变化时更高效):@override void initState() { super.initState(); // 方式1:实时监听用户登录/登出状态 FirebaseAuth.instance.authStateChanges().listen((User? user) { setState(() { if (user != null) { UserId = user.uid; UserMail = user.email; } else { // 用户未登录时重置数据 UserId = null; UserMail = null; } }); }); // 方式2:直接获取当前已登录用户(适合无需实时监听的场景) // User? currentUser = FirebaseAuth.instance.currentUser; // if (currentUser != null) { // setState(() { // UserId = currentUser.uid; // UserMail = currentUser.email; // }); // } }避免直接显示null值
在Text组件中增加判断,未登录时显示友好提示:Text( 'Hello ${UserMail ?? "访客"}', style: TextStyle(color: Colors.white), ), Text( '${UserId ?? "未登录"}', style: TextStyle(color: Colors.white), ),
额外排查点
- 确认
firebase_core已正确配置,且main函数中完成了Firebase初始化 - 检查用户是否真处于登录状态,是否在其他页面执行了登出操作
- 确认用户账号的email字段不为空(部分第三方登录账号可能无邮箱信息)
内容的提问来源于stack exchange,提问作者Boatti
相关产品推荐
相关产品推荐

