簡體   English   中英

同一個流(QuerySnapshot)可以與不同頁面上的多個 StreamBuilder 一起使用嗎? - -撲

[英]Can same stream(QuerySnapshot) be used with multiple StreamBuilder on different pages? ---Flutter

也許這是一個新手問題,但我想知道是否可以使用相同的流(Stream)來構建兩個頁面的用戶界面。 讓我們舉個例子:如果有兩個頁面應該顯示從 firebase 讀取的相同數據列表(比如用戶名和地址)。這可以通過從 firestore 讀取一次數據並在每個頁面上使用相同的 streamstreambuilder來完成嗎?

我能夠在第一頁上顯示列表(使用 streambuilder 和 Listview.builder),但是當我導航到第二頁並使用相同的流時(不是再次從 firebase 讀取它,而是使用第一頁讀取的相同 stream)它不起作用。 我試過 StreamController.broadcast(); 也沒有運氣。

有人可以幫忙嗎?

發生這種情況是因為 stream 已經有偵聽器(第一個StreamBuilder )。 相反,您可以使用某種 state 管理(它會因應用程序復雜性而異)並提供 stream。

假設您正在收聽Stream<List<int>> (舉個簡單的例子)。 如果您使用flutter_bloc package,您可以擁有一個帶有 StreamSubscription 的StreamSubscription ,它將是該Stream的唯一偵聽器,然后您可以在您的應用程序周圍使用來自 BLoC 的數據。
如果您對響應式編程和 Dart Streams 知之甚少,可能會感到困惑(我必須承認,我花了很多時間試圖理解它 - 但它比它接縫更簡單,),但是fluter_bloc package 有一個很好的文檔。 您可以找到一個示例,其中將StreamSubscription與 Firestore 結合使用!

如果您對 package 或任何示例有任何疑問,請隨時在 GitHub 存儲庫中發布問題!

是的,我剛剛解決了這個問題。 使用返回 stream 的 static 方法創建class。在您的 StreamBuilder 小部件中使用此 stream。 並在任何頁面上使用此小部件:)

例子:

class FirebaseStream {
  // ...
  static Stream<DocumentSnapshot<Model>> myStreamMethod() {
    return _collectionRef.snapshots();
  }
  // _collectionRef is collection reference with withConverter<Model>()
}

暫無
暫無

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

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