estoy usando compose y para esto tengo un viewmodel que consulta un DAO (por el momento no he abstraido en repositorio) este dao devuelve lo que necesita la vista y el viewmodel se encarga de hacer los flujos hacia la UI con StateFlows
aqui un pedazo de la UI de Navegacion donde he atomizado todo para poder verlo a detalle en otro lado tengo implementado un for y una lista con esos mismos BottomNavItem
entonces en la propiedad del Badge que hace alusion a la cuenta de notificaciones simplemente no recompone nada y se salta las composiciones
he hecho de todo, si alguien puede ayudar y dar luz sobre como mostrar notificaciones de forma correcta en el BottomBar con NavigationBar y NavigationBarItem agradeceria el comentario
dejo el codigo
@Composable
fun BottomNavigationBar(
currentRoute: String, // The current route to determine the selected item
onItemClick: (String) -> Unit, // Callback for item clicks
cartViewModel: CartViewModel = hiltViewModel()
) {
val count by cartViewModel.totalItemsInCart.collectAsState()
Log.d("INITIALCOUNTUI", "$count")
///region BottomNavItems
val cartItem = BottomNavItem(
route = Route.CART.name,
selectedIcon = R.drawable.ic_cart_filled,
unselectedIcon = R.drawable.ic_cart,
title = "Cart",
hasNewValue = false,
badgeCount = 0
)
val homeItem = BottomNavItem(
route = Route.HOME.name,
selectedIcon = R.drawable.ic_homefood,
unselectedIcon = R.drawable.ic_homefood,
title = "Home",
hasNewValue = false,
badgeCount = null
)
val ordersItem = BottomNavItem(
route = Route.MYORDERS.name,
selectedIcon = R.drawable.ic_orders,
unselectedIcon = R.drawable.ic_orders,
title = "MisOrdenes",
hasNewValue = false,
badgeCount = null
)
val favoritesItem = BottomNavItem(
route = Route.FAVORITES.name,
selectedIcon = R.drawable.ic_favorite_filled,
unselectedIcon = R.drawable.ic_favorite_outlined,
title = "Favoritos",
hasNewValue = false,
badgeCount = null
)
///endregion
NavigationBar(
containerColor = Colours.salmonCarmesi,
contentColor = Colours.riceGray
) {
// Cart Item
NavigationBarItem(
colors = NavigationBarItemColors(
selectedIconColor = Colours.pinkRol,
selectedTextColor = Colours.riceGray,
selectedIndicatorColor = Colours.salmonCarmesi,
unselectedIconColor = Colours.riceGray,
unselectedTextColor = Colours.riceGray,
disabledIconColor = Colours.unselectedRed,
disabledTextColor = Colours.ghostGrey
),
icon = {
if (count > 0 ) {
BadgedBox(
badge = {
Badge {
Text(
text = count.toString(),
modifier = Modifier.semantics {
contentDescription = "${cartItem.title} new items"
}
)
}
}
) {
Icon(
imageVector = ImageVector.vectorResource(
id = if (currentRoute == cartItem.route) cartItem.selectedIcon else cartItem.unselectedIcon
),
contentDescription = cartItem.title
)
}
} else {
Icon(
imageVector = ImageVector.vectorResource(
id = if (currentRoute == cartItem.route) cartItem.selectedIcon else cartItem.unselectedIcon
),
contentDescription = cartItem.title
)
}
},
label = { Text(
text = ordersItem.title,
color = Colours.sweetCream,
fontSize = 12.sp,
fontWeight = FontWeight.Light
)},
selected = currentRoute == cartItem.route,
onClick = { onItemClick(cartItem.route) }
)
// Home Item
NavigationBarItem(
colors = NavigationBarItemColors(
selectedIconColor = Colours.pinkRol,
selectedTextColor = Colours.riceGray,
selectedIndicatorColor = Colours.salmonCarmesi,
unselectedIconColor = Colours.riceGray,
unselectedTextColor = Colours.riceGray,
disabledIconColor = Colours.unselectedRed,
disabledTextColor = Colours.ghostGrey
),
icon = {
Icon(
imageVector = ImageVector.vectorResource(
id = if (currentRoute == homeItem.route) homeItem.selectedIcon else homeItem.unselectedIcon
),
contentDescription = homeItem.title
)
},
label = { Text(
text = ordersItem.title,
color = Colours.sweetCream,
fontSize = 12.sp,
fontWeight = FontWeight.Light
)},
selected = currentRoute == homeItem.route,
onClick = { onItemClick(homeItem.route) }
)
// Orders Item
NavigationBarItem(
colors = NavigationBarItemColors(
selectedIconColor = Colours.pinkRol,
selectedTextColor = Colours.riceGray,
selectedIndicatorColor = Colours.salmonCarmesi,
unselectedIconColor = Colours.riceGray,
unselectedTextColor = Colours.riceGray,
disabledIconColor = Colours.unselectedRed,
disabledTextColor = Colours.ghostGrey
),
icon = {
Icon(
imageVector = ImageVector.vectorResource(
id = if (currentRoute == ordersItem.route) ordersItem.selectedIcon else ordersItem.unselectedIcon
),
contentDescription = ordersItem.title
)
},
label = { Text(
text = ordersItem.title,
color = Colours.sweetCream,
fontSize = 12.sp,
fontWeight = FontWeight.Light
)},
selected = currentRoute == ordersItem.route,
onClick = { onItemClick(ordersItem.route) }
)
// Favorites Item
NavigationBarItem(
colors = NavigationBarItemColors(
selectedIconColor = Colours.pinkRol,
selectedTextColor = Colours.riceGray,
selectedIndicatorColor = Colours.salmonCarmesi,
unselectedIconColor = Colours.riceGray,
unselectedTextColor = Colours.riceGray,
disabledIconColor = Colours.unselectedRed,
disabledTextColor = Colours.ghostGrey
),
icon = {
Icon(
imageVector = ImageVector.vectorResource(
id = if (currentRoute == favoritesItem.route)
favoritesItem.selectedIcon
else
favoritesItem.unselectedIcon
),
contentDescription = favoritesItem.title
)
},
label = { Text(
text = ordersItem.title,
color = Colours.sweetCream,
fontSize = 12.sp,
fontWeight = FontWeight.Light
)
},
selected = currentRoute == favoritesItem.route,
onClick = { onItemClick(favoritesItem.route) }
)
}
}