【发布时间】:2019-07-04 08:21:29
【问题描述】:
我有这个 StreamController:
StreamController<Workout> _selectedWorkoutSubject = new StreamController()
我在这样的 StreamBuilder 中收听它:
StreamBuilder(
stream: workoutBloc.selectedWorkoutStream,
builder: (BuildContext context, AsyncSnapshot<Workout> snapshot) {
if (snapshot.hasData) {
return ...
} else {
return Text('loading...');
}
}
);
当我离开当前页面并返回它时,我得到了异常:Bad state: Stream has already been listened to. 我知道我一次只能执行一次,但这不是我正在做的吗?当我离开页面时,StreamBuilder 应该收集垃圾,从而释放流,以便其他东西可以收听它。
或者一个 Stream 通常只能听一次(一次不能听一次)?我知道我可以做到
StreamController<Workout> _selectedWorkoutSubject = new StreamController.broadcast();
但我试图理解为什么它不像我最初那样工作。
【问题讨论】:
-
我会发布更多代码,包括您在哪里分配锻炼块以及那里的流。