4

我正在听 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 了解不多,所以我不知道该怎么做,但我真的很想避免任何内存泄漏。

4

2 回答 2

7

您担心这一点是对的,但会为您完成所有繁重的工作,包括订阅和取消订阅,因此如果您的听众是唯一被收听的地方,您StreamBuilder就不必担心。但是如果你正在听你自己,那么你将不得不订阅一个方法。StreamBuilderStreamStreamcancelStatefulWidget dispose

于 2020-02-06T03:54:38.207 回答
3

如果我错了,有人应该纠正我,但我认为这就是StreamBuilder课程的重点: 查看源代码,它似乎很dispose()自然地取消订阅。

于 2020-02-06T03:55:26.863 回答