Compose 實作清單多選
今天我們要來實作 Kimoji App 裡多選標籤的功能。我們會把勾選的狀態和邏輯放到 ViewModel。透過讓 ViewModel 管理所有狀態,可以讓程式碼更簡潔,也更容易測試。
此系列文章是以我的業餘專案: Kimoji 為範例。
這款以純 Jetpack Compose 撰寫的 side project,已經在 Google Play 上架。 歡迎試玩!
📥 立馬下載 | | | 🎟️ 限免兌換碼
- 首先定義
Label
data model,以便讓它儲存勾選狀態,並把預設值設為 false。
2. 在 ViewModel 中實作 changeLabelChecked
函式,用這個函式接收要修改的標籤,並用的新值去修改標籤勾選狀態。
3. 在 DiaryScreen
提供 ViewModel 的 changeLabelChecked
函式給「標籤清單」 composable 的 onCheckedLabel
。如下所示:
4. 開啟 LabelList
並在介面上新增一個 onCheckedLabel
lambda 函式參數,以便向下傳遞給 LabelItem
5. 我們來看一下 LabelItem.kt
檔案。這個檔案內有個 composable function:會根據 LabelList
提供的checked
state 來決定 borderColor
和 backgroundColor
。
6. 現在我們把 app 跑起來,然後嘗試點選任何標籤。結果竟然無法順利選取標籤。
這是因為 Compose 只會觀察 MutableList
有沒有新增及移除 element。所以 Compose 無法發現 item 內的值有變化 (在這裡是 checkedState
),除非我們叫 Compose 也要觀察這些內容。
我們將在明天的文章中,繼續探討解決方法。
此系列文章是以我的業餘專案: Kimoji 為範例
Kimoji 是一款心情日記 App,讓你用可愛的 emoji 來撰寫你的心情日記。現在就來試試這款設計精美的微日記吧!
📥 立馬下載 | | | 🎟️ 限免兌換碼