Page 1 of 1

Wie kann ich den aufgehobenen Zustand meiner TopAppbar pro Ziel aktualisieren?

Posted: 12 Mar 2025, 12:27
by Anonymous
Ich habe eine Navigationsleiste mit einem Navhost mit zwei Zielen:

Code: Select all

@Serializable
object Training

@Serializable
object Statistics

data class TopLevelRoute(val name: String, val route: T, val icon: ImageVector)

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun HomeScreen() {

val topLevelRoutes = listOf(
TopLevelRoute("Training", Training, Icons.Default.Lightbulb),
TopLevelRoute("Statistics", Statistics, Icons.Default.AutoGraph)
)

val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
val navController = rememberNavController()

Scaffold(
modifier = Modifier
.fillMaxSize()
.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
CenterAlignedTopAppBar(
scrollBehavior = scrollBehavior,
title = {
Text("Title")
}
)
},
bottomBar = {
NavigationBar {
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentDestination = navBackStackEntry?.destination
topLevelRoutes.forEach { topLevelRoute ->
NavigationBarItem(
icon = { Icon(topLevelRoute.icon, contentDescription = topLevelRoute.name) },
label = { Text(topLevelRoute.name) },
selected = currentDestination?.hierarchy?.any { it.hasRoute(topLevelRoute.route::class) } == true,
onClick = {
navController.navigate(topLevelRoute.route) {
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
launchSingleTop = true
restoreState = true
}
}
)
}
}
}
) { innerPadding ->
NavHost(navController, startDestination = Training, Modifier.padding(innerPadding)) {
composable {
Text("Training")
}
composable {
StatisticsScreen()
}
}
}
}

@Composable
fun StatisticsScreen() {
LazyColumn {
items(50) {
Text(modifier = Modifier.fillMaxWidth(), text = "Item $it")
}
}
}
Ich verwende einen PinnedScrollBehavior , damit der CenteralignedTopAppbar nach dem Inhalt darunter aufgehoben wird. Das Problem, das ich habe, ist, dass der aufgehobene Zustand nicht pro Ort aktualisiert wird. Sobald ich zu einem nicht -krollbaren Standort wechselt, bleibt der centeralignedTopappbar aufgehoben. Dies?>