From 23825ceed54763e8a4898f83474d1b8057d35423 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Wed, 21 Aug 2024 15:57:45 -0400 Subject: [PATCH] Avoids bottom nav recompositions --- .../amethyst/ui/navigation/AppBottomBar.kt | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppBottomBar.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppBottomBar.kt index 8210cdbb1..8b1aaa75e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppBottomBar.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppBottomBar.kt @@ -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, - 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 = {