pref(ui): navigation

This commit is contained in:
rhunk
2024-05-21 23:14:38 +02:00
parent 3804516e99
commit a196092c2d

View File

@@ -35,14 +35,18 @@ class Navigation(
@Composable
fun TopBar() {
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentRoute = remember(navBackStackEntry) { routes.getCurrentRoute(navBackStackEntry) }
val canGoBack = remember (navBackStackEntry) { routes.getCurrentRoute(navBackStackEntry)?.let {
val canGoBack = remember(navBackStackEntry) { currentRoute?.let {
!it.routeInfo.primary || it.routeInfo.childIds.contains(routes.currentDestination)
} == true }
TopAppBar(title = {
val currentRoute = routes.getCurrentRoute(navBackStackEntry)
currentRoute?.title?.invoke() ?: Text(text = currentRoute?.routeInfo?.translatedKey?.value ?: "Unknown Page")
currentRoute?.apply {
title?.invoke() ?: routeInfo.translatedKey?.value?.let {
Text(text = it)
}
}
}, navigationIcon = {
val backButtonAnimation by animateFloatAsState(if (canGoBack) 1f else 0f,
label = "backButtonAnimation"
@@ -65,17 +69,17 @@ class Navigation(
}
}
}, actions = {
routes.getCurrentRoute(navBackStackEntry)?.topBarActions?.invoke(this)
currentRoute?.topBarActions?.invoke(this)
})
}
@Composable
fun BottomBar() {
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentRoute = remember(navBackStackEntry) { routes.getCurrentRoute(navBackStackEntry) }
val primaryRoutes = remember { routes.getRoutes().filter { it.routeInfo.primary } }
NavigationBar {
val currentRoute = routes.getCurrentRoute(navBackStackEntry)
primaryRoutes.forEach { route ->
NavigationBarItem(
alwaysShowLabel = true,
@@ -103,7 +107,7 @@ class Navigation(
@Composable
fun FloatingActionButton() {
val navBackStackEntry by navController.currentBackStackEntryAsState()
routes.getCurrentRoute(navBackStackEntry)?.floatingActionButton?.invoke()
remember(navBackStackEntry) { routes.getCurrentRoute(navBackStackEntry) }?.floatingActionButton?.invoke()
}
@Composable