snapshotFlow:將 Compose 的 state 轉換為 Flow
已經開發了這麼多 Kimoji App 的功能,該埋點了吧!今天的文章會示範在使用者捲動「日記清單」時,觸發一個 side effect 來記錄埋點。
此系列文章是以我的業餘專案: Kimoji 為範例。
這款以純 Jetpack Compose 撰寫的 side project,已經在 Google Play 上架。 歡迎試玩!
📥 立馬下載
使用 snapshotFlow
可以將 State<T>
物件轉換成一個 cold Flow。snapshotFlow
會在被 collect 後執行它的 block
,並 emit 在其中讀取到的 State
物件。當 snapshotFlow
block
內部讀取到的 State
物件改變時,如果新的值不等同於先前 emit 的值,Flow 就會 emit 新的值給它的 collector (這項行為類似於 Flow.distinctUntilChanged
)。
以下的 code 會示範使用者捲動「日記清單」時,觸發一個 side effect 來記錄埋點。我們可以在每次 listState.firstVisibleItemIndex
改變時,使用 LaunchedEffect
來觸發 side-effect。
在上面的程式碼中,listState.firstVisibleItemIndex
這個 state 會轉換成一個 Flow,並且能受益於 Flow operators 的強大功能。這樣,我們就可以使用 filter
來篩選條件,並使用 collect
來觸發埋點。
此系列文章是以我的業餘專案: Kimoji 為範例
Kimoji 是一款心情日記 App,讓你用可愛的 emoji 來撰寫你的心情日記。現在就來試試這款設計精美的微日記吧!
📥 立馬下載