fix(nav): clear back stack on bottom-nav taps so no back arrow shows

popUpTo(route) { inclusive = true } only pops if `route` is already in
the stack. From Home, tapping any other bottom-nav tab left Home in the
back stack, so canPop() returned true and the back arrow appeared on a
root tab.

Pop up to the graph's start destination instead (also inclusive). This
clears Home — and any drawer/deep-push entries above it — before
navigating to the new bottom-nav root, so each bottom-nav tap leaves
exactly one entry in the stack.

https://claude.ai/code/session_01PrirRcL7g8iX7vTqqLTkBS
This commit is contained in:
Claude
2026-04-27 18:39:23 +00:00
parent 09920ac8d1
commit 0e4379c5bf
@@ -24,6 +24,7 @@ import android.annotation.SuppressLint
import androidx.compose.material3.DrawerState
import androidx.compose.material3.DrawerValue
import androidx.compose.runtime.Stable
import androidx.navigation.NavGraph.Companion.findStartDestination
import androidx.navigation.NavHostController
import com.vitorpamplona.amethyst.ui.navigation.SKIP_SLIDE_ANIMATION_KEY
import com.vitorpamplona.amethyst.ui.navigation.routes.Route
@@ -78,7 +79,11 @@ class Nav(
override fun navBottomBar(route: Route) {
navigationScope.launch {
controller.navigate(route) {
popUpTo(route) {
// Clear the back stack down to and including the graph's start
// destination so a bottom-nav tap leaves only the new route in
// the stack. Without inclusive=true, Home would remain below
// the new tab and canPop() would wrongly show a back arrow.
popUpTo(controller.graph.findStartDestination().id) {
inclusive = true
}
launchSingleTop = true