Нужно ли отменить стрим <QuerySnapshot>(флаттер) - PullRequest
1 голос
/ 06 февраля 2020

Я слушаю коллекцию документов в FireStore (как часть приложения чата). Я делаю это с помощью службы, которая создает Stream<QuerySnapshot> следующим образом:

_snapshots$ = Firestore.instance.collection('messages').orderBy('date',descending: false).snapshots()

Затем я создаю StreamBuilder следующим образом:

return StreamBuilder<List<Message>>(
        stream: widget.chatService.messages$,
        builder: (context, snapshot) => (snapshot.hasData)
...

Мне интересно, нужно ли мне отсоединить этот поток в методе dispose, содержащем виджет StreamBuilder. Я не знаю много о Streams и StreamBuilders, поэтому я не уверен, как это сделать, но я действительно хочу избежать любых утечек памяти.

Ответы [ 2 ]

3 голосов
/ 06 февраля 2020

Вы вправе беспокоиться об этом, но StreamBuilder сделает всю тяжелую работу за вас, включая подписку и отписку, так что вам не нужно беспокоиться об этом , если StreamBuilder - единственное место где ваш Stream слушается. Но если вы слушаете Stream сами, то вам придется cancel подписаться на StatefulWidget dispose метод.

2 голосов
/ 06 февраля 2020

Кто-то должен исправить меня, если я ошибаюсь, но я думаю, что в этом суть класса StreamBuilder: Глядя на исходный код , кажется, что он отписывается на dispose() естественно.

...