当它是广播流时如何防止丢弃事件?

1 broadcast stream flutter

我想防止颤动在没有小部件正在监听时丢弃广播流事件。因为我想在其他页面路由中听这个。

我有如下所示的块对象。

class UserBloc extends Object {
    final _user = StreamController<UserModel>.broadcast();
    final _uid = StreamController<String>.broadcast();

    Stream<UserModel> get user => _user.stream;
    Stream<String> get uid => _uid.stream;

    Function(UserModel) get setUser => _user.sink.add;
    Function(String) get setUID => _uid.sink.add;
Run Code Online (Sandbox Code Playgroud)

我正在我的子页面路由中收听这些流

StreamBuilder(
    stream: userBloc.user,
    builder: (context, snapshot) {
    print(snapshot.connectionState);
    print(snapshot.data);
    return Text('hi');
    },
),
Run Code Online (Sandbox Code Playgroud)

它无需使用广播流即可工作。然而,当我改为广播时,运气不佳。

问题是广播流在没有人监听时丢弃事件,但我想在弹出其他 MaterialPage 时开始监听。

使用广播流,当我开始收听时,流中的数据始终为空。

我怎样才能实现这个目标?

pso*_*pso 5

将 StreamController 替换为RxDart 包中的BehaviorSubject 。

一个特殊的 StreamController,它捕获已添加到控制器的最新项目,并将其作为第一个项目发送到任何新侦听器。