Jetpack Compose 与协程的 StateFlow
Jetpack Compose with Coroutine's StateFlow
我在将 StateFlow 与 Jetpack Compose 结合使用时 运行 遇到了一个奇怪的问题,我没有在 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
基于您在 Twitter 上提到的 https://github.com/cyph3rcod3r/D-KMP-Architecture 项目:
问题是,在下面的代码中,每次调用 getter 时都会创建一个 HomeViewModel
的新实例,这意味着您正在观察的 homeViewModel.stateFlow
和您正在观察的实例更新不同。
class MainViewModel : ViewModel() {
val homeViewModel get() = HomeViewModel()
fun getListOfNames(){
homeViewModel.getList()
}
}
我在将 StateFlow 与 Jetpack Compose 结合使用时 运行 遇到了一个奇怪的问题,我没有在 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
基于您在 Twitter 上提到的 https://github.com/cyph3rcod3r/D-KMP-Architecture 项目:
问题是,在下面的代码中,每次调用 getter 时都会创建一个 HomeViewModel
的新实例,这意味着您正在观察的 homeViewModel.stateFlow
和您正在观察的实例更新不同。
class MainViewModel : ViewModel() {
val homeViewModel get() = HomeViewModel()
fun getListOfNames(){
homeViewModel.getList()
}
}