我正在尝试设置此后的导航后退按钮 SO thread ,但无法使其工作。
@ExperimentalFoundationApi
@Composable
fun LazyVerticalGridActivityScreen() {
val navController = rememberNavController()
val navigationIcon: (@Composable () -> Unit)? =
if (navController.previousBackStackEntry != null) {
{
IconButton(onClick = { navController.popBackStack() }) {
Icon(imageVector = Icons.Filled.ArrowBack, contentDescription = null)
}
}
} else {
null
}
Scaffold(
topBar = {
TopAppBar(title = { Text("Lazy Vertical Grid") }, navigationIcon = navigationIcon)
},
content = {
NavHost(navController = navController, startDestination = "home") {
composable("home") { HomeScreen(navController) }
composable("details/{listId}") { backStackEntry ->
backStackEntry.arguments?.getString("listId")
?.let { DetailsScreen(it, navController) }
}
}
}
)
}
有人可以帮忙解决这个问题吗?谢谢!
最佳答案
更改 navController
状态不会使其容器重新组合,这就是此 navigationIcon
保持 null
的原因。
要使其重新组合,您需要使用addOnDestinationChangedListener
:
var canPop by remember { mutableStateOf(false) }
DisposableEffect(navController) {
val listener = NavController.OnDestinationChangedListener { controller, _, _ ->
canPop = controller.previousBackStackEntry != null
}
navController.addOnDestinationChangedListener(listener)
onDispose {
navController.removeOnDestinationChangedListener(listener)
}
}
val navigationIcon: (@Composable () -> Unit)? =
if (canPop) {
{
IconButton(onClick = { navController.popBackStack() }) {
Icon(imageVector = Icons.Filled.ArrowBack, contentDescription = null)
}
}
} else {
null
}
...
关于kotlin - 撰写导航后退按钮未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68700884/