gpt4 book ai didi

android - Jetpack Compose 与 Coroutine 的 StateFlow

转载 作者:行者123 更新时间:2023-12-04 12:34:00 25 4
gpt4 key购买 nike

我在使用带有 Jetpack Compose 的 StateFlow 时遇到了一个奇怪的问题,我没有收到 StateFlow 中的更新值。这是我尝试按照示例中的建议观察 Stateflow 的代码。

@Composable
fun List(homeViewModel: HomeViewModel) {

val appState by homeViewModel.stateFlow.collectAsState()

if (appState.isLoading) {
CircularProgressIndicator()
}
MaterialTheme {
LazyColumn {
items(appState.names) { name ->
Name(name = name.name)
}
}
}
}
我正确收到初始值,但没有收到更新值
setContent {
Surface(color = MaterialTheme.colors.background) {
List(mainViewModel.homeViewModel)
}
}
我已经像这样在 viewModel 中定义了我的 stateFlow
internal val stateFlow = MutableStateFlow(AppState())
我通过这个更新值
stateFlow.value = AppState(loading = false, listOf("1", "2"))
我的 AppState Pojo
data class AppState(val names: List<Names> = emptyList(), val isLoading: Boolean = true, val error: Throwable? = null)
问题是当我像上面那样更新 stateFlow 的值时,我希望可组合组件能够重新组合和更新该值,但更新的值永远不会出现在我上面的可组合方法中。我需要一点帮助来解决我哪里出错了

PS: I haven't tried this on LiveData yet

最佳答案

基于https://github.com/cyph3rcod3r/D-KMP-Architecture你在推特上提到的项目:
问题是在下面的代码中有一个 HomeViewModel 的新实例。每次调用 getter 时都会创建,这意味着 homeViewModel.stateFlow您正在观察和正在更新的实例是不同的。

class MainViewModel : ViewModel() {
val homeViewModel get() = HomeViewModel()

fun getListOfNames(){
homeViewModel.getList()
}
}

关于android - Jetpack Compose 与 Coroutine 的 StateFlow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66494596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com