在 Flutter 中,StreamBuilder 是一個非常有用的 widget,它可以根據與 Stream 的最新交互快照自我構建。這個 widget 特別適合於需要即時更新內容的應用場景,如聊天應用、社交網絡等。
StreamBuilder 的基本用法如下:
StreamBuilder(
stream: stream, // 你的 Stream 對象
builder: (BuildContext context, AsyncSnapshot snapshot) {
// 這裡是 UI 構建邏輯,可以根據 snapshot 的數據來決定顯示什麼
},
)
當提供一個 Stream 給 StreamBuilder時,它會監聽 Stream 的事件。每當其發出一個新的數據項目,builder 函數就會被調用,並且 AsyncSnapshot 會包含新的數據信息。這樣便可根據數據的變化來更新 UI。
如果 Stream 發出一個錯誤,AsyncSnapshot 會帶有錯誤信息,我們可以決定如何處理這個錯誤(比如顯示一個錯誤提示)。當 Stream 完成所有事件的發送,AsyncSnapshot 的連接狀態會變為 ConnectionState.done,這時也可以進行相應的處理。
另外,Stream和另一個也用來處理非同步事件的 Future 比,其差異如下:
- 數據傳遞:
Future代表一個將來某時可能會變得可用的單一結果或錯誤。當結果可用時,接收者可以註冊回調來處理該值或錯誤。Stream提供一個事件的連續流,這些事件隨著時間變化而變化,我們可以對這些變化作出反應。
- 訂閱:
Future只能被消費一次,當它完成時,便不能再從它那裡獲取更多的數據。Stream可以有多個訂閱者,這意味著多個組件可以從同一個流接收更新。
如果需要一個一次性的非同步結果,使用 Future 及對應的 FutureBuilder ,如果需要監聽一個隨時間變化的數據序列,則就用Stream 及對應的 StreamBuilder。


Leave a comment