Ben Tilford
02/18/2025, 11:44 PMBen Tilford
02/18/2025, 11:44 PMdata class ListState(
val query: String = "",
val items: List<String> = emptyList(),
val editItem: String = ""
)
@Dao
interface ItemDao {
@Query("select * from item where name like :name order by name")
fun findAllByName(name: String): Flow<String>
@Query("select * from item order by name")
fun findAll(): Flow<String>
}
class ListViewModel(
state: ListState,
private val dao: ItemDao,
): ViewModel() {
private val _state = MutableStateFlow(state)
val state = combine(
_state,
loadItems(state.query)
) { s, l ->
s.copy(items = l)
}.stateIn(viewModelScope, SharingStarted.WhileSubscribed(3000), state)
fun loadItems(query: String? = null) = when {
query.isNullOrEmpty() -> dao.findAll()
else -> dao.findAllByName(query)
}
fun handleEvent(event: EventType) {
when(event) {
is EventType.Search -> TODO()
}
}
}
Andrew Reed
02/19/2025, 9:08 AM