feat(ui): add bottom navigation with 4 tabs
This commit is contained in:
32
app/src/main/java/com/radiola/ui/navigation/BottomNavBar.kt
Normal file
32
app/src/main/java/com/radiola/ui/navigation/BottomNavBar.kt
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user