我正在收听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)
...
我想知道是否需要在包含StreamBuilder
小部件的dispose方法中分离此流。我对Streams和StreamBuilders的了解不多,所以不确定如何执行此操作,但我确实想避免任何内存泄漏。
答案 0 :(得分:5)
您应该为此担心,但是StreamBuilder
会为您完成所有繁重的工作,包括订阅和取消订阅,因此如果StreamBuilder
,您不必担心是您的Stream
唯一的收听地点。。但是,如果您自己收听Stream
,则必须cancel
订阅{{ 1}} StatefulWidget
方法。
答案 1 :(得分:3)
如果我写错了,应该有人纠正我,但是我认为这是StreamBuilder
类的重点:Looking at the source code,它似乎自然会退订dispose()
。