说我直接在集团上致电.listen。我没有对该流的引用,这意味着我无法对其调用.cancel。此流是否曾经被自动取消?
就我而言,它不在小部件中,而在数据模型中。当数据模型超出范围时,应该将其丢弃,但我担心这种流永远不会被取消并在应用程序被杀死之前一直存在:
bloc.state.listen((state) {
if (state is MyState) {
dispatch(MyEvent());
}
});
请注意,我的IDE不会发出有关流未被取消的警告。但是,当我这样做时:
StreamSubscription myStream; // IDE gives underline and warning
myStream = bloc.state.listen((state) {
if (state is MyState) {
dispatch(MyEvent());
}
});
如果我未在某处调用.cancel,我的IDE将发出警告以取消我的流。在第一个示例中,我没有收到IDE警告来取消我的流
答案 0 :(得分:1)
在第一种情况和第二种情况下,订阅是相同的。
如果您的数据模型在应用的整个生命周期中都持续存在,那么您就可以了。
否则,应在处理数据模型后将StreamSubscription
分配给变量,并取消此流订阅,否则,即使在处理数据模型之后,也不会处理和调用侦听器。
如果您在小部件中使用该数据模型类,则该类应为StatefulWidget
,并且您将在State.dipose
method中取消流订阅。