use experimental rail

This commit is contained in:
2026-06-22 18:27:27 +03:00
parent 7a254a5085
commit 420dc4e044
6 changed files with 150 additions and 157 deletions
@@ -3,12 +3,12 @@ package ru.shadowsparky.ui
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.calculateEndPadding
import androidx.compose.foundation.layout.calculateStartPadding
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawing
import androidx.compose.foundation.layout.width
import androidx.compose.material3.ColorScheme
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
@@ -29,12 +29,13 @@ import androidx.compose.runtime.Immutable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import ru.shadowsparky.ui.nav.Route
import ru.shadowsparky.ui.theme.ComponentDefaults
import ru.shadowsparky.ui.theme.getColorScheme
const val USE_EXPERIMENTAL_RAIL = false
const val USE_EXPERIMENTAL_RAIL = true
@Immutable
data class NavigationEntry<out T : Route>(
@@ -125,9 +126,7 @@ private fun <T : Route> BottomBar(
NavigationBarItem(
currentRoute == entry.route,
onClick = { onSelectNavigation?.invoke(entry.route) },
icon = {
Icon(entry.painter, contentDescription = entry.title)
},
icon = { Icon(entry.painter, contentDescription = entry.title) },
label = { Text(entry.title) }
)
}
@@ -144,23 +143,30 @@ private fun <T : Route> ExpandedContent(
onSelectNavigation: ((T) -> Unit)?,
content: @Composable ((PaddingValues) -> Unit)
) {
Row(Modifier.fillMaxSize().padding(values)) {
Spacer(Modifier.width(4.dp))
NavigationRail {
val topPadding = values.calculateTopPadding()
val bottomPadding = values.calculateBottomPadding()
val startPadding = values.calculateStartPadding(LayoutDirection.Ltr)
val endPadding = values.calculateEndPadding(LayoutDirection.Ltr)
Row(modifier = Modifier.fillMaxSize().padding(top = topPadding)) {
NavigationRail(modifier = Modifier.padding(horizontal = 4.dp)) {
navigationEntries.forEach { entry ->
NavigationRailItem(
selected = currentRoute == entry.route,
onClick = { onSelectNavigation?.invoke(entry.route) },
icon = {
Icon(entry.painter, contentDescription = entry.title)
},
icon = { Icon(entry.painter, contentDescription = entry.title) },
label = { Text(entry.title) }
)
}
}
Spacer(Modifier.width(4.dp))
Box(Modifier.weight(1f)) {
content(PaddingValues(0.dp))
Box(modifier = Modifier.weight(1f)) {
content(
PaddingValues(
start = startPadding,
top = 0.dp,
end = endPadding,
bottom = bottomPadding
)
)
}
}
}