我是不是需要取消 Stream<QuerySnapshot> (颤振)
Posted
技术标签:
【中文标题】我是不是需要取消 Stream<QuerySnapshot> (颤振)【英文标题】:Do I need to cancel Stream<QuerySnapshot> (flutter)我是否需要取消 Stream<QuerySnapshot> (颤振) 【发布时间】:2020-05-22 01:20:39 【问题描述】:我正在听 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 了解不多,所以我不知道该怎么做,但我真的很想避免任何内存泄漏。
【问题讨论】:
【参考方案1】:如果我错了,有人应该纠正我,但我认为这就是 StreamBuilder
类的重点:Looking at the source code,它似乎自然而然地取消订阅 dispose()
。
【讨论】:
【参考方案2】:你担心这个是对的,但是StreamBuilder
会为你完成所有繁重的工作,包括订阅和取消订阅,所以你不必担心如果StreamBuilder
是唯一的地方正在收听您的Stream
的位置。 但是,如果您自己正在收听Stream
,那么您必须在StatefulWidget
dispose
方法上订阅cancel
。
【讨论】:
以上是关于我是不是需要取消 Stream<QuerySnapshot> (颤振)的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 类型“Future<dynamic>”不是“Stream<PostModel>”类型的子类型?