如果未将BLoC流分配给变量,我是否需要处置它们?

时间:2019-06-20 17:25:39

标签: flutter dart 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警告来取消我的流

1 个答案:

答案 0 :(得分:1)

在第一种情况和第二种情况下,订阅是相同的。

如果您的数据模型在应用的整个生命周期中都持续存在,那么您就可以了。

否则,应在处理数据模型后将StreamSubscription分配给变量,并取消此流订阅,否则,即使在处理数据模型之后,也不会处理和调用侦听器。

如果您在小部件中使用该数据模型类,则该类应为StatefulWidget,并且您将在State.dipose method中取消流订阅。