请查看以下使用Dart Riverpod的伪代码。
final dependingStreamProvider = StreamProvider.autoDispose<int>((ref) {
final depending = ref.watch(dependingProvider);
if (depending == typeA) {
return AStream(); // returns stream of int
} else {
return BStream(); // returns a different stream of int
}
});
在本例中,当dependingProvider
更改其状态时,StreamProvider
将创建另一个Stream
示例。
我的问题是,过时的Stream
示例是否会被Riverpod处理掉(即它的StreamController
得到close
d)?或者我们必须以某种方式处理自己?
我在这里看到了类似的问题:Do you have to manually dispose streams from a streamprovider in Flutter?,但我不太确定是否接受的答案是指我的情况以上。
我知道当没有人监听StreamProvider
本身时,autoDispose
会负责处理,但上述情况是另一种情况。🤔
1条答案
按热度按时间rxztt3cl1#
我继续创建了一个示例代码。
TL;DR是的,
StreamProvider
会处理以前的Stream
示例及其订阅。我创建了以下
Provider
s,以便streamProvider
根据switcherProvider
的状态在streamA
和streamB
之间切换。点击FAB时,切换
switcherProvider
的状态。结果是这样的:
当我第一次点击FAB并切换到
streamB
时,streamA
没有发出新值。当我第二次点击FAB并切换到streamA
时,没有流发出任何值,因为两个流都自动关闭了。