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