FirebaseAuth监听器获非空用户,Provider传递却始终返回Null
问题原因及解决方案
核心问题是Consumer监听的类型错误:你在MultiProvider中注册的是UserProvider这个ChangeNotifier,但在Consumer里却试图直接监听UserModel?类型,Provider树中不存在这个类型的实例,所以始终返回null。
修复步骤
1. 修改Consumer代码,监听UserProvider并获取内部的user属性
将MyApp中的Consumer代码替换为:
class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return Consumer<UserProvider>( builder: (context, userProvider, child) { final UserModel? user = userProvider.user; // 根据用户状态返回对应UI return Text(user != null ? "已登录:${user.email}" : "未登录"); }, ); } }
如果使用Provider.of方式,代码如下:
class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { final userProvider = Provider.of<UserProvider>(context); final UserModel? user = userProvider.user; return Text(user != null ? "已登录:${user.email}" : "未登录"); } }
2. 验证状态更新逻辑
你的UserProvider中的updateUser方法已经正确调用了notifyListeners(),且main函数中_userProvider实例和传入MultiProvider的是同一个,这部分逻辑没问题,修复Consumer监听类型后就能正确获取用户数据。
额外说明
如果希望直接监听UserModel而非UserProvider,可以通过Provider衍生出UserModel的实例,但对于简单场景,直接监听UserProvider并读取内部属性是最直观且高效的方式。
内容的提问来源于stack exchange,提问作者Stéphane de Luca
相关产品推荐
相关产品推荐

