首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Coroutine的StateFlow编写Jetpack

用Coroutine的StateFlow编写Jetpack
EN

Stack Overflow用户
提问于 2021-03-05 14:45:04
回答 1查看 6.6K关注 0票数 7

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

代码语言:javascript
复制
@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)
        }
    }
}

}

我正确地接收初始值,但不接收更新的值。

代码语言:javascript
复制
setContent {
  Surface(color = MaterialTheme.colors.background) {
                List(mainViewModel.homeViewModel)
      }
}

我在stateFlow中定义了这样的viewModel

代码语言:javascript
复制
internal val stateFlow = MutableStateFlow(AppState())

我根据以下内容更新该值

代码语言:javascript
复制
stateFlow.value = AppState(loading = false, listOf("1", "2"))

我的AppState Pojo

代码语言:javascript
复制
data class AppState(val names: List<Names> = emptyList(), val isLoading: Boolean = true, val error: Throwable? = null)

问题是,当我像上面一样更新stateFlow的值时,我希望可组合的值可以重新组合和更新值,但是更新的值永远不会出现在上面的可组合方法中。我需要一些关于我哪里出了问题的帮助

PS:我还没在LiveData上试过这个,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-06 16:54:22

基于你在推特上提到的https://github.com/cyph3rcod3r/D-KMP-Architecture项目:

问题是,在下面的代码中,每次调用getter时都会创建一个新的HomeViewModel实例,这意味着您正在观察的homeViewModel.stateFlow和正在更新的实例是不同的。

代码语言:javascript
复制
class MainViewModel : ViewModel() {
     val homeViewModel get() = HomeViewModel()

    fun getListOfNames(){
        homeViewModel.getList()
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66494596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档