in Jetsnack/app/src/main/java/com/example/jetsnack/ui/home/Home.kt [107:172]
fun JetsnackBottomBar(
tabs: Array<HomeSections>,
currentRoute: String,
navigateToRoute: (String) -> Unit,
color: Color = JetsnackTheme.colors.iconPrimary,
contentColor: Color = JetsnackTheme.colors.iconInteractive
) {
val routes = remember { tabs.map { it.route } }
val currentSection = tabs.first { it.route == currentRoute }
JetsnackSurface(
color = color,
contentColor = contentColor
) {
val springSpec = SpringSpec<Float>(
// Determined experimentally
stiffness = 800f,
dampingRatio = 0.8f
)
JetsnackBottomNavLayout(
selectedIndex = currentSection.ordinal,
itemCount = routes.size,
indicator = { JetsnackBottomNavIndicator() },
animSpec = springSpec,
modifier = Modifier.navigationBarsPadding(start = false, end = false)
) {
tabs.forEach { section ->
val selected = section == currentSection
val tint by animateColorAsState(
if (selected) {
JetsnackTheme.colors.iconInteractive
} else {
JetsnackTheme.colors.iconInteractiveInactive
}
)
JetsnackBottomNavigationItem(
icon = {
Icon(
imageVector = section.icon,
tint = tint,
contentDescription = null
)
},
text = {
Text(
text = stringResource(section.title).uppercase(
ConfigurationCompat.getLocales(
LocalConfiguration.current
).get(0)
),
color = tint,
style = MaterialTheme.typography.button,
maxLines = 1
)
},
selected = selected,
onSelected = { navigateToRoute(section.route) },
animSpec = springSpec,
modifier = BottomNavigationItemPadding
.clip(BottomNavIndicatorShape)
)
}
}
}
}