Будет ли StreamBuilder автоматически отключаться от потока в виджете без состояния? - PullRequest
0 голосов
/ 30 января 2019

Когда я использую BLOC во флаттере, например:

class StreamText extends StatelessWidget {
  StreamText(
    this.stream, {
    this.style,
  });

  final Stream<dynamic> stream;
  final TextStyle style;

  @override
  Widget build(BuildContext context) {
    return StreamBuilder<dynamic>(
      stream: stream,
      builder: (context, snapshot) {
        return Text(snapshot.data.toString(), style: style);
      },
    );
  }
}

Это виджет без сохранения состояния, в котором нет метода dispose();

и как я могу отключитьпоток или он автоматически отключится от потока, когда этот виджет будет уничтожен?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Нет, оно не закроется автоматически.В общем, владельцем потока является тот, кто управляет состоянием потока.

На мой взгляд, хорошим решением является создание виджета с сохранением состояния для ваших BLoC и закрытие потоков его методом dispose.

В этой статье показан возможный способ реализации этого, взгляните на класс BlocProvider.

0 голосов
/ 30 января 2019

Вы передаете поток в виджет без сохранения состояния. Вы должны закрыть поток, переопределяя метод dispose класса подкласса State, связанного с виджетом с сохранением состояния, в котором у вас есть экземпляр потока.Кроме того, в этом виджете вы должны проверить, является ли snapshot.data null (и возвращает, например, Container()), или вы получаете сообщение об ошибке, поскольку вы не передаете initialData в StreamBuilder.

...