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

Dart空安全下Stream的map方法传参类型不匹配报错怎么解决?

错误原因

_auth.authStateChanges() 方法返回的流类型是 Stream<User?>,即流发出的元素本身就是可空的用户对象(用户未登录时会发射null)。你定义的转换函数_userFromFirebaseUser入参要求为非空的User类型,和map方法要求的入参类型不匹配,所以触发类型校验报错。
另外你当前转换函数内部的if(user != null)判断是无效冗余代码,因为参数声明为非空User时,编译器会默认保证入参不可能为null。

修复方案

方案1:直接修改转换函数的入参类型为可空

这是最简洁的方案,直接对齐流的输入类型即可:

// 把参数类型从User改为User?
Users? _userFromFirebaseUser(User? user){
    if (user != null){
       return Users(uid: user.uid);
    }
    return null;
}

Stream<Users?> get user {
    return _auth.authStateChanges().map(_userFromFirebaseUser);
}

方案2:不修改原有转换函数,在map层做判空适配

如果你的_userFromFirebaseUser函数在其他地方被引用不能修改参数类型,可以在map调用时加一层适配逻辑:

Users? _userFromFirebaseUser(User user){
    return Users(uid: user.uid);
}

Stream<Users?> get user {
    return _auth.authStateChanges().map((User? user) {
      // 先判断流返回的用户是否非空,非空才调用转换函数,否则直接返回null
      return user == null ? null : _userFromFirebaseUser(user);
    });
}

内容的提问来源于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 10:15:01