add wide navbar

This commit is contained in:
2026-08-15 13:15:18 +03:00
parent e99743a9df
commit 64b7ed216a
@@ -28,8 +28,6 @@ import androidx.compose.material3.WideNavigationRail
import androidx.compose.material3.WideNavigationRailItem
import androidx.compose.material3.WideNavigationRailValue
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfoV2
import androidx.compose.material3.adaptive.navigationsuite.NavigationSuite
import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteItem
import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteScaffoldDefaults
import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteScaffoldLayout
import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteType
@@ -146,11 +144,7 @@ private fun <T : Route> DynamicNavigationScaffold(
content: @Composable (PaddingValues) -> Unit,
) {
val entries = navigationEntries.orEmpty()
val isWideRail = navigationSuiteType == NavigationSuiteType.WideNavigationRailCollapsed ||
navigationSuiteType == NavigationSuiteType.WideNavigationRailExpanded
val railState = rememberWideNavigationRailState(
initialValue = WideNavigationRailValue.Collapsed
)
val railState = rememberWideNavigationRailState(WideNavigationRailValue.Collapsed)
var railHasFocus by remember { mutableStateOf(false) }
LaunchedEffect(railHasFocus) {
if (railHasFocus) railState.expand() else railState.collapse()
@@ -158,50 +152,32 @@ private fun <T : Route> DynamicNavigationScaffold(
NavigationSuiteScaffoldLayout(
navigationSuiteType = navigationSuiteType,
navigationSuite = {
if (isWideRail) {
WideNavigationRail(
state = railState,
modifier = Modifier.onFocusChanged { railHasFocus = it.hasFocus }
.focusGroup(),
) {
entries.forEach { entry ->
WideNavigationRailItem(
railExpanded =
railState.targetValue == WideNavigationRailValue.Expanded,
selected = currentRoute == entry.route,
onClick = {
onSelectNavigation?.invoke(entry.route)
},
icon = {
Icon(entry.painter, entry.title)
},
label = { Text(entry.title) },
modifier = Modifier.focusBorder(false, CircleShape)
)
}
}
} else {
NavigationSuite(navigationSuiteType = navigationSuiteType) {
entries.forEach { entry ->
NavigationSuiteItem(
navigationSuiteType = navigationSuiteType,
selected = currentRoute == entry.route,
onClick = {
onSelectNavigation?.invoke(entry.route)
},
icon = {
Icon(
painter = entry.painter,
contentDescription = entry.title,
)
},
label = { Text(entry.title) },
modifier = Modifier.focusBorder(false, CircleShape)
)
}
WideNavigationRail(
state = railState,
modifier = Modifier.onFocusChanged { railHasFocus = it.hasFocus }
.focusGroup(),
) {
entries.forEach { entry ->
WideNavigationRailItem(
railExpanded =
railState.targetValue == WideNavigationRailValue.Expanded,
selected = currentRoute == entry.route,
onClick = {
onSelectNavigation?.invoke(entry.route)
},
icon = {
Icon(entry.painter, entry.title)
},
label = {
if (railState.currentValue == WideNavigationRailValue.Expanded) {
Text(entry.title)
}
},
modifier = Modifier.focusBorder(false, CircleShape)
)
}
}
},
}
) {
Scaffold(
modifier = if (scrollBehavior != null) {