为何_userFromFirebaseUser函数不允许返回null且传入map()时报错
问题原因
两个报错均由Dart空安全规则限制导致:
- 自定义函数不允许返回null:函数定义的返回值类型为非空类型
Users,空安全规则下非空类型的函数禁止返回null值;同时入参User为非空类型,和authStateChanges流发射的可空User?类型不匹配。 - 传入
map()方法报错:_auth.authStateChanges()返回的流类型为Stream<User?>,你声明的返回流类型为Stream<Users>,二者类型不匹配,同时转换函数的入参、返回值类型也和流的要求不符。
修正方案
方案1:使用可空类型适配未登录状态(推荐,可兼容用户未登录的场景)
final FirebaseAuth _auth = FirebaseAuth.instance; // 基于Firebase用户转换自定义用户对象 Users? _userFromFirebaseUser(User? user){ if (user != null){ return Users(uid: user.uid); } return null; } // 登录状态变更流 Stream<Users?> get user { return _auth.authStateChanges().map(_userFromFirebaseUser); }
方案2:过滤null值返回非空流
如果不需要监听用户未登录的状态,可以先过滤掉流中的null值再做转换,最终返回非空类型的流:
final FirebaseAuth _auth = FirebaseAuth.instance; // 登录状态变更流(仅用户登录时发射数据) Stream<Users> get user { return _auth.authStateChanges() .where((user) => user != null) .map((user) => Users(uid: user!.uid)); }
内容的提问来源于stack exchange,提问作者Something You
相关产品推荐
相关产品推荐

