Do I need to cancel Stream<QuerySnapshot> (flutter)
Solution 1
You are right to worry about this, but StreamBuilder
will do all the heavy lifting for you, including subscribing and unsubscribing, so you don't have to worry about it if StreamBuilder
is the only place where your Stream
is being listened to. But if you are listening to the Stream
yourself, then you will have to cancel
the subscription on a StatefulWidget
dispose
method.
Solution 2
Someone should correct me if I'm wrong, but I think that's the point of the StreamBuilder
class: Looking at the source code, it seems to unsubscribe on dispose()
naturally.
gollyzoom
I am a CS major currently working towards Bachelor's degree. I am particularly interested in biocomputation, although in terms of personal projects I tend to focus on web and mobile development.
Updated on December 02, 2022Comments
-
gollyzoom over 1 year
I am listening to a collection of documents in firestore (as part of a chat app). I am doing this by using a service, which creates a
Stream<QuerySnapshot>
as follows:_snapshots$ = Firestore.instance.collection('messages').orderBy('date',descending: false).snapshots()
I then create a StreamBuilder as follows:
return StreamBuilder<List<Message>>( stream: widget.chatService.messages$, builder: (context, snapshot) => (snapshot.hasData) ...
I am wondering if I need to detach this stream in the dispose method containing the
StreamBuilder
widget. I don't know much about Streams and StreamBuilders, so I'm not sure how to do this, but I really want to avoid any memory leaks. -
maganap about 2 yearsFor those wondering, it's like
final subscription = stream.listen(...);
and thensubscription.cancel();
. I use this approach inProvider
s and pass a future to the widgets (instead of a stream). So the provider controls the rebuilds based on other conditions.