我正在尝试在应用程序初始启动时展示应用程序操作指南。我试图呈现3个屏幕。
欢迎 屏幕1 屏幕2
我有这个导航图
composable(Routes.Welcome.name) {
WelcomeScreen(
done = {
navController.navigate(Routes.Screen1.name)
}
)
}
composable(Routes.Screen1.name) {
Screen1(
done = {
navController.navigate(Routes.Screen2.name) {
popUpTo(Routes.Welcome.name)
}
}
)
}
composable(Routes.Screen2.name) {
Screen2(
done = {
navController.navigate(Routes.Screen3.name) {
popUpTo(Routes.Welcome.name)
}
}
)
}
composable(Routes.Screen3.name) {
Screen1(
done = {
navController.navigate(Routes.Main.name)
}
)
}
然而,当我完成Screen1并尝试导航到Screen2时,我会陷入一个无限循环中,屏幕1不断被调用,同时屏幕2被呈现。
@Composable
fun Screen1(
done: () -> Unit,
viewModel: StartupViewModel = hiltViewModel()
) {
val screen1 by viewModel.screen1.observeAsState()
if (screen1 != true) {
Button(onClick = { viewModel.setScreen1(true) }) {
Text(text = "Go to screen 2")
}
} else {
// once screen1 is set in viewmodel I should end up here.
// let my parent handle navigation to next screen.
done()
}
}