标题几乎描述了一切。我发现自己经常这样做。
StreamSubscription willDismissPageStreamSubscription;
@override
void initState() {
willDismissPageStreamSubscription?.cancel();
willDismissPageStreamSubscription =
bloc.willDismissPageStream(widget.pageIndex).listen((willDismiss) {});
}
我在一个可以被多次调用的方法中监听一个流。如果我不取消订阅,每次调用initState时,它都会创建一个新的订阅。我想知道是否有一个Stream,谁允许这样,每次通过调用listen创建一个新的StreamSubscription,旧的订阅被取消。
@override
void initState() {
bloc.willDismissPageStream(widget.pageIndex).listen((willDismiss) {});
}
EDIT: 我正在寻找一个单一订阅流,但不是抛出一个异常,而是取消最后一个StreamSubscription。
EDIT 2: 如果这样的Stream不存在,我如何创建它?
一般来说,你不希望新的订阅突变旧的订阅。这使得观测值难以推理。
这是一个串行模式,一般是用一个 系列一次性产品. 呼叫 set
原子化地取消之前的订阅。
SerialDisposable serial = new SerialDisposable();
@override
void initState() {
serial.set(bloc.willDismissPageStream(widget.pageIndex).listen((willDismiss) {}));
}
如果你想在Observable中得到这种行为,你可以发送一个完成的通知,而不是导致管道拆分的错误,但这不是我所推荐的。