11package com.codandotv.streamplayerapp.core_navigation.bottomnavigation
22
3- import androidx.compose.foundation.background
4- import androidx.compose.foundation.layout.WindowInsets
5- import androidx.compose.foundation.layout.fillMaxHeight
6- import androidx.compose.foundation.layout.fillMaxSize
73import androidx.compose.foundation.layout.height
8- import androidx.compose.foundation.layout.navigationBarsPadding
9- import androidx.compose.foundation.layout.padding
104import androidx.compose.material3.Icon
115import androidx.compose.material3.LocalAbsoluteTonalElevation
126import androidx.compose.material3.MaterialTheme
@@ -16,67 +10,70 @@ import androidx.compose.material3.NavigationBarItemDefaults
1610import androidx.compose.material3.Text
1711import androidx.compose.material3.surfaceColorAtElevation
1812import androidx.compose.runtime.Composable
19- import androidx.compose.runtime.getValue
2013import androidx.compose.ui.Modifier
21- import androidx.compose.ui.graphics.Color
2214import androidx.compose.ui.res.painterResource
2315import androidx.compose.ui.res.stringResource
2416import androidx.compose.ui.unit.dp
2517import androidx.navigation.NavController
26- import androidx.navigation.compose.currentBackStackEntryAsState
18+ import com.codandotv.streamplayerapp.core_navigation.helper.currentRoute
19+
20+ private val bottomMenuItems = listOf (
21+ BottomNavItem .Home , BottomNavItem .Games , BottomNavItem .News , BottomNavItem .Downloads
22+ )
2723
2824@Composable
2925fun StreamPlayerBottomNavigation (navController : NavController ) {
30- val items = listOf (
31- BottomNavItem .Home ,
32- BottomNavItem .Games ,
33- BottomNavItem .News ,
34- BottomNavItem .Downloads
35- )
36-
3726 NavigationBar (
3827 containerColor = MaterialTheme .colorScheme.surface,
3928 contentColor = MaterialTheme .colorScheme.onBackground,
4029 modifier = Modifier .height(72 .dp)
4130 ) {
42- val navBackStackEntry by navController.currentBackStackEntryAsState()
43- val currentRoute = navBackStackEntry?.destination?.route
44- items.forEach { item ->
45- NavigationBarItem (
46- colors = NavigationBarItemDefaults .colors(
47- selectedIconColor = MaterialTheme .colorScheme.onBackground,
48- unselectedIconColor = MaterialTheme .colorScheme.surfaceVariant,
49- selectedTextColor = MaterialTheme .colorScheme.onBackground,
50- unselectedTextColor = MaterialTheme .colorScheme.surfaceVariant,
51- indicatorColor = MaterialTheme .colorScheme.surfaceColorAtElevation(
52- LocalAbsoluteTonalElevation .current
53- )
54- ),
55- icon = {
56- Icon (
57- painterResource(id = if (currentRoute == item.screenRoute) item.iconSelected else item.iconUnselected),
58- contentDescription = stringResource(id = item.title),
59- )
60- },
31+ val currentRoute = currentRoute(navController = navController)
32+
33+ bottomMenuItems.forEach { item ->
34+ NavigationBarItem (colors = NavigationBarItemDefaults .colors(
35+ selectedIconColor = MaterialTheme .colorScheme.onBackground,
36+ unselectedIconColor = MaterialTheme .colorScheme.surfaceVariant,
37+ selectedTextColor = MaterialTheme .colorScheme.onBackground,
38+ unselectedTextColor = MaterialTheme .colorScheme.surfaceVariant,
39+ indicatorColor = MaterialTheme .colorScheme.surfaceColorAtElevation(
40+ LocalAbsoluteTonalElevation .current
41+ )
42+ ),
43+ icon = { NavItemIcon (currentRoute, item) },
6144 label = {
6245 Text (
6346 text = stringResource(id = item.title),
6447 style = MaterialTheme .typography.bodySmall,
6548 )
6649 },
6750 selected = currentRoute == item.screenRoute,
68- onClick = {
69- navController.navigate(item.screenRoute) {
70- navController.graph.startDestinationRoute?.let { screen_route ->
71- popUpTo(screen_route) {
72- saveState = true
73- }
74- }
75- launchSingleTop = true
76- restoreState = true
77- }
78- }
79- )
51+ onClick = { onItemClicked(navController, item) })
52+ }
53+ }
54+ }
55+
56+ @Composable
57+ private fun NavItemIcon (
58+ currentRoute : String? ,
59+ item : BottomNavItem
60+ ) {
61+ Icon (
62+ painterResource(id = if (currentRoute == item.screenRoute) item.iconSelected else item.iconUnselected),
63+ contentDescription = stringResource(id = item.title),
64+ )
65+ }
66+
67+ private fun onItemClicked (
68+ navController : NavController , item : BottomNavItem
69+ ) {
70+ navController.navigate(item.screenRoute) {
71+ navController.graph.startDestinationRoute?.let { screen_route ->
72+ popUpTo(screen_route) {
73+ saveState = true
74+ }
8075 }
76+ launchSingleTop = true
77+ restoreState = true
8178 }
8279}
0 commit comments