snapshotFlow:將 Compose 的 state 轉換為 Flow

Kimoji:以 Jetpack Compose 實作一款「心情日記」應用 [29]

John Lu
Oct 2, 2022

已經開發了這麼多 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 來撰寫你的心情日記。現在就來試試這款設計精美的微日記吧!
📥 立馬下載

--

--

John Lu

Android Developer. Deeply motivated by challenges and tends to be excited by breaking conventional ways of thinking and doing. He builds fun and creative apps.