在使用StateFlow与Jetpack一起使用时,我遇到了一个奇怪的问题,在这个问题上,我没有在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)
}
}我在stateFlow中定义了这样的viewModel
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:我还没在LiveData上试过这个,
发布于 2021-03-06 16:54:22
基于你在推特上提到的https://github.com/cyph3rcod3r/D-KMP-Architecture项目:
问题是,在下面的代码中,每次调用getter时都会创建一个新的HomeViewModel实例,这意味着您正在观察的homeViewModel.stateFlow和正在更新的实例是不同的。
class MainViewModel : ViewModel() {
val homeViewModel get() = HomeViewModel()
fun getListOfNames(){
homeViewModel.getList()
}
}https://stackoverflow.com/questions/66494596
复制相似问题