Не отображается кнопка "Создать навигацию назад"
Я пытаюсь настроить кнопку перехода назад, следуя этой теме SO , но не могу заставить ее работать.
@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) }
}
}
}
)
}
Может ли кто-нибудь помочь исправить это? Спасибо!
1 ответ
Решение
Изменение
navController
состояние не заставляет контейнер перекомпоновывать, поэтому это
navigationIcon
остается
null
.
Чтобы он перекомпоновался, вам нужно использовать
addOnDestinationChangedListener
:
var canPop by remember { mutableStateOf(false) }
navController.addOnDestinationChangedListener { controller, _, _ ->
canPop = controller.previousBackStackEntry != null
}
val navigationIcon: (@Composable () -> Unit)? =
if (canPop) {
{
IconButton(onClick = { navController.popBackStack() }) {
Icon(imageVector = Icons.Filled.ArrowBack, contentDescription = null)
}
}
} else {
null
}
...