如果 BLoC 流未分配给变量,我是否需要处置它们?
Do I need to dispose BLoC streams if they aren't assigned to a variable?
假设我直接在一个 bloc 上调用 .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 警告
第一种情况和第二种情况下的订阅是一样的。
如果您的数据模型在应用程序的整个生命周期中都存在,那就没问题。
否则,您应该将 StreamSubscription
分配给一个变量,并在处理数据模型后取消此流订阅,否则即使您处理了数据模型,您的监听器也永远不会被处理和调用。
如果您在小部件中使用该数据模型 class,它应该是 StatefulWidget
并且您将在 State.dipose
method 中取消您的流订阅。
假设我直接在一个 bloc 上调用 .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 警告
第一种情况和第二种情况下的订阅是一样的。
如果您的数据模型在应用程序的整个生命周期中都存在,那就没问题。
否则,您应该将 StreamSubscription
分配给一个变量,并在处理数据模型后取消此流订阅,否则即使您处理了数据模型,您的监听器也永远不会被处理和调用。
如果您在小部件中使用该数据模型 class,它应该是 StatefulWidget
并且您将在 State.dipose
method 中取消您的流订阅。