簡體   English   中英

是一個流<List<Object> &gt; 從 Firebase 快照在節點的每次更改時返回整個節點? 撲

[英]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 現在對我來說仍然很困惑。 塊模式的正確實現應該是什么?

在基本層面上,我確實理解它並且我非常喜歡它,但是考慮一種根據我的需要實現它的方法會導致有點不知所措。

在此圖之后,6 個連接的數據流應該是: 在此處輸入圖片說明

  1. (UI -> BLoC) 一個事件將被發送到bloc
  2. (BLoC -> Repository) Bloc將事件映射到Repository方法。
  3. (Repository -> Database) Repository方法是數據庫的 Create/Update/Delete 方法。
  4. (Database -> Repository) Repository數據庫讀取方法獲取數據庫數據。
  5. (Repository -> BLoC) Repository數據庫的返回 Read 方法將 Data 放入 BLoC。
  6. (BLoC -> UI) BlocProvider 使用數據來重建 UI。

現在我不確定我想出的是返回到 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.

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