我如何才能 firestore 流 snapsnot 暂停
How can i firestore stream snapsnot pause
我有一个由选项卡组成的结构。我在听你在哪个标签页。我在标签页
中使用AutomaticKeepAliveClientMixin
late StreamSubscription _subscription;
@override
void initState() {
super.initState();
_subscription = FirebaseFirestore.instance
.collection('users')
.doc(id)
.snapshots().listen((DocumentSnapshot snapshot) => _onUpdate(snapshot));
widget.tab?.addListener(_tabListener);
}
@override
void dispose() {
_subscription.cancel();
widget.tab?.removeListener(_tabListener);
super.dispose();
}
_tabListener () {
if(widget.tab?.page == 0.0) {
if(_subscription.isPaused) {
_subscription.resume();
}
} else {
_subscription.pause();
}
}
目前没问题,它停止监听并从中断处继续,但当它再次启动时,它会带来停止时发生的所有变化。
在后台不断发送快照更改。
我希望流在选项卡更改时完全停止,并在涉及选项卡时重新开始,我该怎么做?
根据 the StreamSubscription pause method documentation,如果订阅在暂停时接收事件,它们将被缓冲直到订阅恢复。
如 this paragraph 中所述,避免缓冲事件的推荐解决方案是取消订阅并在需要时重新启动它。
我有一个由选项卡组成的结构。我在听你在哪个标签页。我在标签页
中使用AutomaticKeepAliveClientMixin
late StreamSubscription _subscription;
@override
void initState() {
super.initState();
_subscription = FirebaseFirestore.instance
.collection('users')
.doc(id)
.snapshots().listen((DocumentSnapshot snapshot) => _onUpdate(snapshot));
widget.tab?.addListener(_tabListener);
}
@override
void dispose() {
_subscription.cancel();
widget.tab?.removeListener(_tabListener);
super.dispose();
}
_tabListener () {
if(widget.tab?.page == 0.0) {
if(_subscription.isPaused) {
_subscription.resume();
}
} else {
_subscription.pause();
}
}
目前没问题,它停止监听并从中断处继续,但当它再次启动时,它会带来停止时发生的所有变化。
在后台不断发送快照更改。
我希望流在选项卡更改时完全停止,并在涉及选项卡时重新开始,我该怎么做?
根据 the StreamSubscription pause method documentation,如果订阅在暂停时接收事件,它们将被缓冲直到订阅恢复。
如 this paragraph 中所述,避免缓冲事件的推荐解决方案是取消订阅并在需要时重新启动它。