在广播流中如何防止丢包事件?

时间:2018-10-23 22:11:45

标签: stream flutter broadcast

我想防止当没有小部件正在监听时,Flutter放弃广播流事件。因为我想在其他页面路由中收听。

我有如下所示的bloc对象。

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;

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

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

它无需广播流即可工作。但是,当我转播时没有运气。

问题是当没有人正在收听时广播流丢弃事件,但是当我的另一个MaterialPage弹出时我想开始收听。

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

我该如何实现?

1 个答案:

答案 0 :(得分:0)

RxDart package中的BehaviorSubject替换StreamController。

  

一个特殊的StreamController,它捕获已被捕获的最新项目   添加到控制器,并将其作为所有新项的第一项发出   听众。