From 4efe535b0d6e664788725dec0eb4dce525bb00df Mon Sep 17 00:00:00 2001 From: lumartinezba Date: Wed, 20 Aug 2025 17:31:59 -0500 Subject: [PATCH 1/2] Prevent multiple clicks from triggering navigation multiple times --- .../presentation/screens/dashboard/DashboardScreen.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/dashboard/DashboardScreen.kt b/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/dashboard/DashboardScreen.kt index 8b47a10b2..e89d84a58 100644 --- a/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/dashboard/DashboardScreen.kt +++ b/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/dashboard/DashboardScreen.kt @@ -180,9 +180,13 @@ fun DashboardScreen( ), selectedTabIndex = currentTopBarSelectedTabIndex, ) { screen -> - navController.navigate(screen()) { - if (screen == TopBarTabs[0]) popUpTo(TopBarTabs[0].invoke()) - launchSingleTop = true + val targetRoute = screen() + val currentRoute = navController.currentBackStackEntry?.destination?.route + if (currentRoute != targetRoute) { + navController.navigate(targetRoute) { + if (screen == TopBarTabs[0]) popUpTo(TopBarTabs[0].invoke()) + launchSingleTop = true + } } } From 0be970aaf180d276c07811ec94463c4a3350f7e1 Mon Sep 17 00:00:00 2001 From: lumartinezba Date: Wed, 20 Aug 2025 18:18:18 -0500 Subject: [PATCH 2/2] Optimise navigation in DashboardScreen This commit optimises navigation in `DashboardScreen` by checking against `currentDestination` instead of `navController.currentBackStackEntry?.destination?.route`. This avoids potential recompositions triggered by changes in `currentBackStackEntry` that don't affect the actual route. --- .../presentation/screens/dashboard/DashboardScreen.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/dashboard/DashboardScreen.kt b/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/dashboard/DashboardScreen.kt index e89d84a58..860312361 100644 --- a/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/dashboard/DashboardScreen.kt +++ b/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/dashboard/DashboardScreen.kt @@ -181,8 +181,7 @@ fun DashboardScreen( selectedTabIndex = currentTopBarSelectedTabIndex, ) { screen -> val targetRoute = screen() - val currentRoute = navController.currentBackStackEntry?.destination?.route - if (currentRoute != targetRoute) { + if (currentDestination != targetRoute) { navController.navigate(targetRoute) { if (screen == TopBarTabs[0]) popUpTo(TopBarTabs[0].invoke()) launchSingleTop = true