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

Stream 当事件是广播流时,如何防止丢弃事件?,stream,flutter,broadcast,Stream,Flutter,Broadcast,我希望在没有小部件侦听时防止flifter丢弃广播流事件。因为我想在其他页面路由中听这个 我有一个像下面这样的块状物体 class UserBloc extends Object { final _user = StreamController<UserModel>.broadcast(); final _uid = StreamController<String>.broadcast(); Stream<UserModel> get

我希望在没有小部件侦听时防止flifter丢弃广播流事件。因为我想在其他页面路由中听这个

我有一个像下面这样的块状物体

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;
它在不使用广播流的情况下工作。然而,当我改为广播时,运气不好

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

使用广播流,当我开始监听时,流中的数据总是空的


如何实现这一点?

将StreamController替换为来自的Behavior Subject

一种特殊的StreamController,用于捕获已更新的最新项目 添加到控制器,并将其作为第一项发送到任何新的 听众


StreamController.broadcast
不允许此操作。但是您可以为
\u uid
使用
StreamController()
,并公开
uid=>\u uid.stream.transform(LazyBroadcastTransformer())
转换器的来源:到
StreamBuilder(
    stream: userBloc.user,
    builder: (context, snapshot) {
    print(snapshot.connectionState);
    print(snapshot.data);
    return Text('hi');
    },
),