iT邦幫忙

2022 iThome 鐵人賽

DAY 29
0

https://ithelp.ithome.com.tw/upload/images/20220912/20151958IFjRs0xIZ4.png Medium 好讀版

已經開發了這麼多 Kimoji App 的功能,該埋點了吧!今天的文章會示範在使用者捲動「日記清單」時,觸發一個 side effect 來記錄埋點。

此系列文章是以我的業餘專案: Kimoji 作為範例。
這款以純 Jetpack Compose 撰寫的 side project,已經在 Google Play 上架。 歡迎試玩!

https://ithelp.ithome.com.tw/upload/images/20220907/20151958vXuPLv4aki.png 立馬下載

使用 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。

val listState = rememberLazyListState()

LazyColumn(state = listState) {
    // ...
}

LaunchedEffect(listState) {
    snapshotFlow { listState.firstVisibleItemIndex }
        .distinctUntilChanged()
        .filter { it == true }
        .collect {
            AnalyticsService.sendScrolledItemEvent()
        }
}

在上面的程式碼中,listState.firstVisibleItemIndex 這個 state 會轉換成一個 Flow,並且能受益於 Flow operators 的強大功能。這樣,我們就可以使用 filter 來篩選條件,並使用 collect 來觸發埋點。

此系列文章是以我的業餘專案:Kimoji 為範例。

Kimoji 是一款心情日記 App,讓你用可愛的 emoji 來撰寫你的心情日記。現在就來試試這款設計精美的微日記吧!

https://ithelp.ithome.com.tw/upload/images/20220907/20151958vXuPLv4aki.png 立馬下載

Reference: https://developer.android.com/jetpack/compose/side-effects


上一篇
rememberCoroutineScope
下一篇
Compose 解決了哪些挑戰?
系列文
Kimoji:以 Jetpack Compose 實作一款「心情日記」應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言