是否需要取消 Stream<QuerySnapshot> (flutter)
Do I need to cancel Stream<QuerySnapshot> (flutter)
我正在收听 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
小部件的处置方法中分离此流。我不太了解 Streams 和 StreamBuilders,所以我不确定该怎么做,但我真的想避免任何内存泄漏。
你担心这个是对的,但是 StreamBuilder
会为你完成所有繁重的工作,包括订阅和取消订阅,所以你不必担心 如果 StreamBuilder
是唯一可以听到您的 Stream
的地方。 但是如果您自己正在收听 Stream
,那么您将不得不 cancel
订阅 StatefulWidget
dispose
方法。
如果我错了,应该有人纠正我,但我认为这就是 StreamBuilder
class 的重点:Looking at the source code,它似乎在 dispose()
上取消订阅顺其自然。
我正在收听 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
小部件的处置方法中分离此流。我不太了解 Streams 和 StreamBuilders,所以我不确定该怎么做,但我真的想避免任何内存泄漏。
你担心这个是对的,但是 StreamBuilder
会为你完成所有繁重的工作,包括订阅和取消订阅,所以你不必担心 如果 StreamBuilder
是唯一可以听到您的 Stream
的地方。 但是如果您自己正在收听 Stream
,那么您将不得不 cancel
订阅 StatefulWidget
dispose
方法。
如果我错了,应该有人纠正我,但我认为这就是 StreamBuilder
class 的重点:Looking at the source code,它似乎在 dispose()
上取消订阅顺其自然。