【问题标题】:Why isn't this broadcast stream working when I add a second listener为什么当我添加第二个侦听器时此广播流不起作用
【发布时间】:2021-03-23 23:22:04
【问题描述】:

我不明白为什么这个广播流不起作用。

我正在将数据从 _auth.onAuthStateChanged 发送到一个新的 StreamController,以便我可以更好地控制流。

下面的代码可以正常工作,但是一旦我取消注释 _userStream.listen(_handleUserStream); 行,流就会停止工作,即使 userStream 是广播流。

我尝试将 StreamController 初始化为 StreamController.broadcast(),但即使只有一个侦听器,它也根本不起作用。

class AuthService() {
  final FirebaseAuth _auth = FirebaseAuth.instance;

  StreamController<FirebaseUser> _userStreamController;
  Stream<User> _userStream;
  Stream<User> get userStream => _userStream;


  AuthService() {
    initStream();
  }

  initStream() async {
    _userStreamController = StreamController<FirebaseUser>();
    _userStream = _userStreamController.stream
        .asBroadcastStream()
        .asyncMap(_userFromFirebaseUser);

    _auth.onAuthStateChanged.listen((event) {
      _userStreamController.add(event);
    });

    // _userStream.listen(_handleUserStream);
  }

  ... other methods
}

【问题讨论】:

    标签: flutter firebase-authentication


    【解决方案1】:

    你可以在initStream的第一行直接将streamController初始化为广播流,然后就可以直接使用该流了,如下图

    class AuthService() {
      final FirebaseAuth _auth = FirebaseAuth.instance;
    
      StreamController<FirebaseUser> _userStreamController;
      Stream<User> _userStream;
      Stream<User> get userStream => _userStream;
    
    
      AuthService() {
        initStream();
      }
    
      initStream() async {
        _userStreamController = StreamController.broadcast();
        _userStream = _userStreamController.stream;
    
        _userStream.listen(_handleUserStream);
    
        _auth.onAuthStateChanged.listen((event) {
          _userStreamController.add(event);
        });
      }
    
      ... other methods
    }
    

    【讨论】:

    • 就像我说的,我尝试初始化为StreamController.broadcast(),但没有运气。你试过这个并且成功了吗?
    • 你能否在 onAuthStateChanged 监听器中放置断点或打印语句来确认事件实际上正在进入
    猜你喜欢
    • 1970-01-01
    • 2021-09-06
    • 2019-02-27
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    相关资源
    最近更新 更多