Avoids bottom nav recompositions

This commit is contained in:
Vitor Pamplona 2024-08-21 15:57:45 -04:00
parent 8d8016e01b
commit 23825ceed5

View File

@ -144,25 +144,35 @@ private fun RenderBottomMenu(
)
NavigationBar(tonalElevation = Size0dp) {
bottomNavigationItems.forEach { item ->
HasNewItemsIcon(item, accountViewModel, navEntryState, nav)
ObserveSelection(item, navEntryState) { selected ->
HasNewItemsIcon(selected, item, accountViewModel, nav)
}
}
}
}
}
@Composable
private fun RowScope.HasNewItemsIcon(
private fun ObserveSelection(
route: Route,
accountViewModel: AccountViewModel,
navEntryState: State<NavBackStackEntry?>,
nav: (Route, Boolean) -> Unit,
content: @Composable (Boolean) -> Unit,
) {
val selected =
content(
navEntryState.value
?.destination
?.route
?.startsWith(route.base) ?: false
?.startsWith(route.base) ?: false,
)
}
@Composable
private fun RowScope.HasNewItemsIcon(
selected: Boolean,
route: Route,
accountViewModel: AccountViewModel,
nav: (Route, Boolean) -> Unit,
) {
NavigationBarItem(
alwaysShowLabel = false,
icon = {