Нужно ли удалять потоки BLoC, если они не назначены переменной? - PullRequest
1 голос
/ 20 июня 2019

Скажи, я прямо звоню. Слушай на блок. У меня нет ссылки на поток, что означает, что я не могу вызвать .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());
  }
});

Моя IDE выдает предупреждение, чтобы отменить мои потоки, если я не вызову .cancel где-нибудь. Я не получаю предупреждение IDE для отмены моих потоков в первом примере

1 Ответ

1 голос
/ 20 июня 2019

Подписка одинакова в первом и втором случае.

Если ваша модель данных сохраняется в течение всего жизненного цикла вашего приложения, у вас все в порядке.

В противном случае вам следует присвоить StreamSubscription переменной и отменить эту потоковую подписку после удаления модели данных, иначе ваш слушатель никогда не будет удален и вызван даже после удаления вашей модели данных.

Если вы используете этот класс модели данных в виджете, он должен быть StatefulWidget, и вы отмените потоковую подписку в методе State.dipose .

...