如果 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 中取消您的流订阅。