簡體   English   中英

如何對flutter中的數據進行分頁監聽,有效取消不必要的監聽?

[英]How to paginate and listen to the data and cancel unnecessary listeners in flutter effectively?

想象一下,我正在嘗試通過對帖子進行分頁來實現類似於 Instagram 的無限滾動,並且我還將監聽已查詢的每個帖子的帖子詳細信息更改。

我首先查詢前 10 個帖子:

void getPosts(){
postStream =
      firestore.collection('posts')
          .limit(10)
          .orderBy('createdAt', descending: true)
          .snapshots().listen((documentSnapshot) {... code to convert to each doc from JSON..}
}

當用戶向下滾動時,我使用偵聽器檢測滾動並查詢更多帖子

void getMorePosts(){
paginatedPostStream =
      firestore.collection('posts')
          .limit(10)
          .orderBy('createdAt', descending: true)
          .startAfterDocument(lastPostDocSnapshot)
          .snapshots().listen((documentSnapshot) {... code to convert to each doc from JSON..}
}

當用戶不再需要這些帖子時,我會通過以下方式取消stream:

postStream.cancel();
paginatedPostStream.cancel();

然而,我意識到這樣做只是停止監聽最早和最新分頁的stream。例如,用戶可能通過以下方式查詢

10 | 10 | 10 | 10 | 10
^                   ^

但取消stream只適用於查詢的前10個帖子和后10個帖子。 如何更有效的取消監聽,防止數據泄露?

歡迎任何建議。 謝謝你。

正如評論中所討論的,您將需要管理所有流,而不僅僅是第一個和最后一個。 如果您想限制正在消耗的資源,您將需要關閉每個 stream,因為它變得過時了。

這里沒有單一的最佳實踐,但我所知道的大多數實現都是實現一個虛擬的 window,其中有幾個(比如 3-5)個充滿信息的屏幕。 因此,如果在您的情況下您可以一次在屏幕上顯示 10 個文檔,那么您將讓聽眾保持在 3-5 個 10 個文檔流上:當前顯示的信息和 1 或 2 個屏幕的上下。 然后可以取消此虛擬 window 之外的任何 stream 以減少資源消耗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM