feat(ui): add bottom navigation with 4 tabs

This commit is contained in:
nk
2026-06-01 12:23:27 +03:00
parent cf79af5273
commit c46a865742
3 changed files with 88 additions and 1 deletions

View File

@@ -0,0 +1,32 @@
package com.radiola.ui.navigation
import androidx.compose.material3.Icon
import androidx.compose.material3.NavigationBar
import androidx.compose.material3.NavigationBarItem
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.navigation.NavController
import androidx.navigation.compose.currentBackStackEntryAsState
@Composable
fun BottomNavBar(navController: NavController) {
val currentRoute = navController.currentBackStackEntryAsState().value?.destination?.route
NavigationBar {
NavDestinations.items.forEach { destination ->
NavigationBarItem(
icon = { Icon(destination.icon, contentDescription = destination.labelRes) },
label = { Text(destination.labelRes) },
selected = currentRoute == destination.route,
onClick = {
if (currentRoute != destination.route) {
navController.navigate(destination.route) {
popUpTo(navController.graph.startDestinationId) { saveState = true }
launchSingleTop = true
restoreState = true
}
}
}
)
}
}
}

View File

@@ -0,0 +1,23 @@
package com.radiola.ui.navigation
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.Home
import androidx.compose.material.icons.filled.Settings
import androidx.compose.material.icons.filled.History
import androidx.compose.ui.graphics.vector.ImageVector
sealed class NavDestinations(
val route: String,
val labelRes: String,
val icon: ImageVector
) {
data object Stations : NavDestinations("stations", "Радио", Icons.Default.Home)
data object Favorites : NavDestinations("favorites", "Избранное", Icons.Default.Favorite)
data object History : NavDestinations("history", "История", Icons.Default.History)
data object Settings : NavDestinations("settings", "Настройки", Icons.Default.Settings)
companion object {
val items = listOf(Stations, Favorites, History, Settings)
}
}