我想使用LiveData<List<DataClass>>
作为@Composable函数中状态的源。
我不能使用新的@Model注释,我在本次演讲中看到Link(at 32:06),可以通过调用函数+observe(/* Data */)
使用LiveData,Flow等。
问题所在:我找不到视频(+ observe())中使用的函数或使用LiveData作为原点的任何其他方式。如何在@Compose函数中使用LiveData?
Project Gradle:
buildscript {
ext.kotlin_version = '1.3.60-eap-76'
repositories {
google()
jcenter()
maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.0-alpha04'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
App gradle:依赖项:
def lifecycle_version = "2.1.0"
def compose_version = "0.1.0-dev02"
// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
androidTestImplementation "androidx.arch.core:core-testing:$lifecycle_version"
implementation "androidx.compose:compose-runtime:$compose_version"
kapt "androidx.compose:compose-compiler:$compose_version"
// Android Compose
implementation "androidx.ui:ui-layout:$compose_version"
implementation "androidx.ui:ui-foundation:$compose_version"
implementation "androidx.ui:ui-framework:$compose_version"
implementation "androidx.ui:ui-tooling:$compose_version"
implementation "androidx.ui:ui-android-text:$compose_version"
implementation "androidx.ui:ui-text:$compose_version"
implementation "androidx.ui:ui-material:$compose_version"
+observe
方法尚不可用,但是在以后的Jetpack Compose版本中应该可用(或类似的方法。)>
[如果您想在正式发布之前使用类似的功能,则可以使用我在此博客文章-https://medium.com/swlh/android-mvi-with-jetpack-compose-b0890f5156ac中找到的此功能
在下面发布以方便消费
fun <T> observe(data: LiveData<T>) = effectOf<T?> {
val result = +state<T?> { data.value }
val observer = +memo { Observer<T> { result.value = it } }
+onCommit(data) {
data.observeForever(observer)
onDispose { data.removeObserver(observer) }
}
result.value
}