我是否需要取消Stream <QuerySnapshot>(颤振)

时间:2020-02-06 03:49:06

标签: flutter memory mobile google-cloud-firestore stream-builder

我正在收听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的了解不多,所以不确定如何执行此操作,但我确实想避免任何内存泄漏。

2 个答案:

答案 0 :(得分:5)

您应该为此担心,但是StreamBuilder会为您完成所有繁重的工作,包括订阅和取消订阅,因此如果StreamBuilder,您不必担心是您的Stream唯一的收听地点。。但是,如果您自己收听Stream,则必须cancel订阅{{ 1}} StatefulWidget方法。

答案 1 :(得分:3)

如果我写错了,应该有人纠正我,但是我认为这是StreamBuilder类的重点:Looking at the source code,它似乎自然会退订dispose()