gpt4 book ai didi

android - StateFlow 在 Jetpack Compose 中导致导航循环

转载 作者:行者123 更新时间:2023-12-05 00:01:53 29 4
gpt4 key购买 nike

应用程序中有两个屏幕。屏幕A和屏幕B。屏幕A的UI和导航逻辑基于状态类。

屏幕状态

data class ScreenAState(
val sourceName: String = "",
val navigateToScreenB: Boolean = false
)

如果用户满足要求,navigateToScreenB 的值将更改为true,并使用以下代码将用户导航到屏幕 B。

if (uiState.navigateToScreenB) {
LaunchedEffect(uiState.navigateToScreenB) {
findNavController().navigate(actionToScreenB)
}
}

现在,当用户按下屏幕 B 上的后退按钮时会出现问题。一旦用户从屏幕 B 返回到屏幕 A,用户将再次导航到屏幕 B,如果后退按钮是,循环将继续在屏幕 B 上再次按下。

我不确定我是否正确使用了 LaunchedEffect。任何帮助将不胜感激。谢谢。

最佳答案

您应该在执行导航后将navigateToScreenB 设置为false。在您的 View 模型中声明类似的内容。

class YourViewModel: ViewModel() {
private val _uiState = MutableStateFlow(ScreenAState())
val uiState = _uiState.asStateFlow()

fun onNavigateToScreenB() {
uiState.update {
it.copy(navigateToScreenB = false)
}
}
...
}

在你的屏幕上:

val uiState by yourViewModel.uiState.collectAsState()
if (uiState.navigateToScreenB) {
LaunchedEffect(uiState.navigateToScreenB) {
viewModel.onNavigateToScreenB()
findNavController().navigate(actionToScreenB)
}
}

关于android - StateFlow 在 Jetpack Compose 中导致导航循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72010920/

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