add wide navbar
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user