【问题标题】:A value of type 'Stream<User?>' can't be returned from the function 'user' because it has a return type of 'Stream<User>' in flutter无法从函数“user”返回类型为“Stream<User?>”的值,因为它在 Flutter 中的返回类型为“Stream<User>”
【发布时间】:2021-08-20 07:24:56
【问题描述】:

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

代码是-

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();

【问题讨论】:

    标签: android ios firebase flutter dart


    【解决方案1】:

    试试这个

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

    【讨论】:

    • 在“用户”上,它显示此错误 - 'AuthRepository.user' ('Stream Function()') 不是 'BaseAuthRepository.user' 的有效覆盖( 'Stream Function()').
    • 这可能是你的扩展类BaseAuthRepository 的问题,上面的 bcs 是空安全的完美选择
    • 是的,确实如此。我真的忘记了。谢谢你兄弟。
    【解决方案2】:

    改变

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

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

    【讨论】:

      【解决方案3】:

      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
      

      【讨论】:

      • 没有。它再次给出同样的错误。在您的代码 sn-p 中,返回 userChanges 给出了相同的错误。
      【解决方案4】:

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

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

      【讨论】:

      • 其实我试过了,但是我在“用户”这一行得到了这个错误,你提到了。这是错误 -AuthRepository.user' ('Stream Function()') is not a valid override of 'BaseAuthRepository.user' ('Stream Function()').
      • 你需要在你的BaseAuthRepository做同样的改变
      • 请阅读指南以迁移到空安全:dart.dev/null-safety/migration-guide
      • 我真的忘记了。我做了修改,问题就解决了。
      【解决方案5】:

      这对我有用:

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

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

      查看documentation 了解更多信息。

      【讨论】:

        猜你喜欢
        • 2021-10-02
        • 2022-01-26
        • 1970-01-01
        • 1970-01-01
        • 2022-10-12
        • 2021-09-04
        • 1970-01-01
        • 2021-11-26
        • 2021-10-05
        相关资源
        最近更新 更多