Dart报错:User? Function(User)无法赋值给User? Function(User?)如何解决
报错含义解释
该报错是Dart类型校验触发的函数签名不匹配提示:
- 你传给
map方法的函数,入参要求是非空User类型,整体签名为User? Function(User) - 而
authStateChanges()返回的流发射的元素是可空User?类型,map要求传入的函数必须支持接收User?类型入参,要求的签名为User? Function(User?)
两类签名不符合类型规则,因此抛出错误。
代码存在的问题
- Firebase Auth的
authStateChanges()方法返回的流本身是Stream<User?>类型:当用户处于未登录、已登出状态时,该流会发射null值,元素天然存在为空的可能 - 你在
map的回调参数中强制声明入参为User user(非空类型),相当于默认流永远不会发射null,和流的实际类型冲突。同时你在回调内部还写了user != null的判空逻辑,和你声明的非空入参也自相矛盾。
修复方案
将map回调的入参类型改为可空User?即可,修改后代码如下:
Stream<User?> get currentUser { return _firebaseAuth.authStateChanges().map((User? user){ return user != null ? User.fromFirebase(user, 0) : null; }); }
内容的提问来源于stack exchange,提问作者Mc Ride
相关产品推荐
相关产品推荐

