无法从函数 'user' 返回类型为 'Stream<User?>' 的值,因为它在 flutter 中的返回类型为 'Stream<User>'

时间:2021-06-02 06:27:51

标签: android ios firebase flutter dart

我正在尝试实现一个 getter,但它在下面代码片段的最后一行向我显示了这个错误。

代码是-

class AuthRepository extends BaseAuthRepository {

  final FirebaseFirestore _firebaseFirestore;
  final auth.FirebaseAuth _firebaseAuth;

  AuthRepository({
    FirebaseFirestore? firebaseFirestore,
    auth.FirebaseAuth? firebaseAuth,
  })  : _firebaseFirestore = firebaseFirestore ?? FirebaseFirestore.instance,
        _firebaseAuth = firebaseAuth ?? auth.FirebaseAuth.instance;

  @override
  // TODO: implement user
  Stream<auth.User> get user => _firebaseAuth.userChanges();

5 个答案:

答案 0 :(得分:2)

试试这个

Stream<auth.User?> get user => auth.userChanges(); 

答案 1 :(得分:1)

改变

 Stream<auth.User> get user => _firebaseAuth.userChanges(); 

Stream<auth.User> get user => _firebaseAuth.userChanges()!;

答案 2 :(得分:1)

documentation 中可以看出,

该方法返回一个Stream的对象,表示它可能为null。

由于不能确定返回的类型的内容,所以不返回,可以检查是否为null。

I.E.

class AuthRepository extends BaseAuthRepository {

final FirebaseFirestore _firebaseFirestore;
final auth.FirebaseAuth _firebaseAuth;

AuthRepository({
  FirebaseFirestore? firebaseFirestore,
  auth.FirebaseAuth? firebaseAuth,
  })  : _firebaseFirestore = firebaseFirestore ?? FirebaseFirestore.instance,
    _firebaseAuth = firebaseAuth ?? auth.FirebaseAuth.instance;

 @override
 // TODO: implement user
 Stream<auth.User> get user => 
   val userChanges = _firebaseAuth.userChanges();
   if (userChanges != null) return userChanges
   else //your logic

答案 3 :(得分:1)

_firebaseAuth.userChanges() 返回可以为空的 User?,因此您需要通过在 ? 之后添加 auth.User 来更新您的返回类型为可以为空,如下所示:

  Stream<auth.User?> get user => _firebaseAuth.userChanges();

答案 4 :(得分:0)

这对我有用:

Stream<auth.User?> get user => _firebaseAuth.userChanges();

当用户的凭据链接或取消链接时,以及用户的个人资料更新时,它会发送事件。此 Stream 的目标是监听用户状态(登录、退出、不同用户和令牌刷新)的实时更改,而无需手动执行重新加载,然后将更改返回到您的应用程序。

查看 documentation 了解更多信息。