В общем, всегда хорошо не показывать слишком много типов Mutable*
.Это обеспечивает согласованность данных.Также кажется, что вы пытаетесь достичь чего-то похожего на lazy
, так почему бы не использовать его.
Так что вы можете рассмотреть функцию расширения для CoroutineScope
в конвертирования приостановкифункция для простого LiveData
:
fun <V> CoroutineScope.liveData(
provider: suspend () -> V
) = lazy<LiveData<V>> {
MutableLiveData<V>().apply {
launch {
postValue(provider())
}
}
}
Если у вас также есть ViewModel
орудие CoroutineScope
, вы можете использовать его как:
val taskGroups() by liveData {
AppDatabase.db.toDoTasksDAO.getGroupsWithItems()
}