【发布时间】:2019-03-28 06:01:15
【问题描述】:
我想防止颤动在没有小部件正在侦听时丢弃广播流事件。因为我想在其他页面路由中听这个。
我有如下的块对象。
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 弹出时开始收听。
使用广播流,当我开始收听时,流中的数据始终为空。
我怎样才能做到这一点?
【问题讨论】:
-
StreamController.broadcast不允许这样做。但是您可以将StreamController()用于_uid并公开uid => _uid.stream.transform(LazyBroadcastTransformer())变压器来自这里的位置:pub.dartlang.org/packages/lazy_broadcast 到