[英]Is a Stream<List<Object>> from Firebase snapshot returning the entire node at every change in the node? Flutter
我開始學習 Flutter,因為我想將我的 iOS 應用程序移植到 Flutter 以在 Android 上運行。 我使用 Firebase 實時數據庫作為后端,我發現firebase_database
包應該適合我的需要,允許我使用我已經擁有的數據庫。 我也在學習使用 BLoC 模式,但我發現的所有 bloc 教程都是針對Firestore
,所有的 Event/State/Bloc/Repository/Streaming 現在對我來說仍然很困惑。 塊模式的正確實現應該是什么?
在基本層面上,我確實理解它並且我非常喜歡它,但是考慮一種根據我的需要實現它的方法會導致有點不知所措。
bloc
。Bloc
將事件映射到Repository
方法。Repository
方法是數據庫的 Create/Update/Delete 方法。Repository
數據庫讀取方法獲取數據庫數據。Repository
數據庫的返回 Read 方法將 Data 放入 BLoC。現在我不確定我想出的是返回到 UI 的數據。
在第2
步,如果我將事件映射到將數據作為Stream<List<Object>>
返回的方法,則在第6
步通過BlocProvider
相應地重建UI
(無狀態小部件)。 現在,正如我所見,如果有任何更改,整個節點都會被下載,谷歌也會向您收取下載費用,這將是很多不必要的重復數據下載。
在 Firebase iOS SDK 中,您可以將觀察者附加到節點,因此您只需使用.childAdded
/ .childRomoved
等獲取快照,並使用它來修改您的 UI。
為了避免無用的下載並確保我的帳戶安全,我寧願在 keepSynced bool 設置為 true 的節點上進行查詢( https://pub.dev/documentation/firebase_database/latest/firebase_database/Query-class.html ) . 這應該(作為 iOS SDK)在第一次觸發時返回,一個包含整個節點的快照,而不是在發生變化時只返回新/更新/刪除的快照,對嗎?
為了實現這種方式,我應該使用在獲取快照和有狀態小部件時手動更新的List<Object>
嗎? 這實際上是我的 iOS 應用程序目前的工作方式。 非常感謝您的幫助,對於這么長的問題很抱歉,從 Swift 切換需要時間。
Firebase 偵聽器僅傳輸在正在偵聽的節點上實際更改的最少量數據。 每次發生任何變化時,它都不會傳輸整個節點及其所有子節點。 所以,它並不像你想象的那么貴。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.