我想防止当没有小部件正在监听时,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弹出时我想开始收听。
使用广播流,当我开始收听时,流中的数据始终为空。
我该如何实现?
答案 0 :(得分:0)
按RxDart package中的BehaviorSubject替换StreamController。
一个特殊的StreamController,它捕获已被捕获的最新项目 添加到控制器,并将其作为所有新项的第一项发出 听众。