You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:24:03