https://kotlinlang.org logo
#compose
Title
# compose
m

Mehdi Haghgoo

11/25/2020, 5:19 AM
I want to back my Compose app's viewmodel with Room and I'm trying to use Room+Kotlin codelab, which seems to have been changed a bit since it was first written. In my ViewModel,
asLiveData()
is not understood.
Unresolved reference
asLiveData
Copy code
class CostViewModel(private val repository: CostRepository): ViewModel() {

    val costs : LiveData<List<Cost>> = repository.costs.asLiveData()

    fun addCost(vararg cost: Cost) = viewModelScope.launch{
        repository.addCost(*cost)
    }
}


class CostViewModelFactory(private val repository: CostRepository) : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        if (modelClass.isAssignableFrom(CostViewModel::class.java)) {
            @Suppress("UNCHECKED_CAST")
            return CostViewModel(repository) as T
        }
        throw IllegalArgumentException("Unknown ViewModel class")
    }
}
My Repo:
Copy code
import kotlinx.coroutines.flow.Flow

class CostRepository(private val costDao: CostDao){
    val costs: Flow<List<Cost>> = costDao.getCosts()


    suspend fun addCost(vararg cost: Cost){
        costDao.addCost(*cost)
    }

    suspend fun deleteCosts(vararg cost: Cost){
        costDao.deleteCost(*cost)
    }
}
My Dao:
Copy code
@Dao
interface CostDao {
    @Query("SELECT * FROM cost")
    fun getCosts(): Flow<List<Cost>>

    @Insert()
    suspend fun addCost(vararg cost: Cost)

    @Delete()
    fun deleteCost(vararg cost: Cost)
}
k

Kaustubh Patange

11/25/2020, 6:31 AM
You need to add
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
dependency.
❤️ 1