Как перехватить нажатие «Назад» в Navigation3 для переключения вкладок нижней навигации?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как перехватить нажатие «Назад» в Navigation3 для переключения вкладок нижней навигации?

Сообщение Anonymous »

Тело:
Я реализую новый

Код: Выделить всё

androidx.navigation3
[/b] в моем проекте Jetpack Compose. Я использую собственный класс Navigator (внедренный через Koin) для управления глобальным backStack.
Архитектура:
  • Глобальная навигация: управляется NavDisplay и SnapshotStateList.
  • Bottom Навигация: реализована как один пункт назначения (

    Код: Выделить всё

    Dashboard
    ) в глобальном стеке. Внутри Dashboard я переключаю экраны, используя локальное состояние var currentTab.
Проблема: Когда я перехожу к Dashboard и переключаюсь на второстепенную вкладку (например, «Профиль»), нажатие системной кнопки «Назад» запускает глобальный NavDisplay onBack, который полностью выводит экран Dashboard и закрывает приложение.
Желаемое поведение:
  • Если на вкладке «Профиль» -> Назад нажмите, переключается на вкладку «Главная».
  • Если на вкладке «Домой» -> При обратном нажатии открывается экран (закрывается приложение).
Фрагменты кода:
1. Navigator.kt (глобальное состояние)
Kotlin

Код: Выделить всё

class Navigator(startDestination: Any) {
val backStack: SnapshotStateList = mutableStateListOf(startDestination)

fun goBack() {
backStack.removeLastOrNull()
}
}
2. RootNavHost.kt (точка входа)
Kotlin

Код: Выделить всё

@Composable
fun RootNavHost() {
val navigator = koinInject()

NavDisplay(
backStack = navigator.backStack,
onBack = { navigator.goBack() }, // 
// Switching content based on currentTab
when (currentTab) {
AppTab.Home -> HomeScreen(...)
AppTab.Profile -> ProfileScreen(...)
}
}
}
Вопрос: Какой шаблон рекомендуется использовать в контексте Navigation3? Должен ли я использовать BackHandler внутри MainScaffold для перехвата обратного события до того, как оно достигнет NavDisplay, или есть способ интегрировать внутреннее состояние Dashboard в стек Navigator?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ation-tabs
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»