Навигация с помощью Compose для Wear OS


Компонент Navigation в Android Jetpack поддерживает приложения Jetpack Compose. Вы можете переходить между элементами composable, используя инфраструктуру и функции компонента Navigation.

На этой странице описаны различия между Jetpack Navigation и Compose для Wear OS.

Настроить

Добавьте в файл build.gradle модуля приложения следующую зависимость:

Kotlin

dependencies {
    def wear_compose_version = "1.7.1"
    implementation "androidx.wear.compose:compose-navigation:$wear_compose_version"
}

Он используется вместо артефакта androidx.navigation:navigation-compose, поскольку предоставляет альтернативные реализации, предназначенные для Wear OS.

Как создать контроллер навигации, хост и граф

Для навигации с помощью Compose for Wear OS требуются те же три компонента, что и в приложениях для других платформ: контроллер навигации, хост и граф.

Чтобы создать экземпляр WearNavigator, реализации NavController, подходящей для приложений Wear OS, используйте rememberSwipeDismissableNavController():

val navController = rememberSwipeDismissableNavController()

NavController – основной API, используемый для навигации в приложениях Compose. Он управляет переходом между элементами composable в хосте навигации, который в Wear OS представлен компонентом SwipeDismissableNavHost.

val navController = rememberSwipeDismissableNavController()
SwipeDismissableNavHost(
    navController = navController,
    startDestination = "message_list"
) {
    // TODO: build navigation graph
}

Как и компонуемый элемент NavHost, он принимает ссылку на контроллер навигации, маршрут для начального пункта назначения и построитель для графа навигации, который здесь показан как конечная лямбда-функция.

Начальный пункт назначения должен быть указан в конструкторе графа навигации вместе со всеми остальными пунктами, доступными для навигации с помощью контроллера навигации.

В приложении для Wear OS укажите SwipeDismissableNavHost в качестве контента элемента AppScaffold, чтобы поддерживать компоненты верхнего уровня, такие как индикатор времени, прокрутки или положения, а также индикатор страницы. Используйте объект AppScaffold над объектами SwipeDismissableNavHost и ScreenScaffold на уровне экрана, чтобы добавить объект TimeText на экран по умолчанию и обеспечить правильную анимацию при переходе между экранами. Кроме того, ScreenScaffold добавляет PositionIndicator для контента, который можно прокручивать.
    AppScaffold {
        val navController = rememberSwipeDismissableNavController()
        SwipeDismissableNavHost(
            navController = navController,
            startDestination = "message_list"
        ) {
            composable("message_list") {
                MessageList(onMessageClick = { id ->
                    navController.navigate("message_detail/$id")
                })
            }
            composable("message_detail/{id}") {
                MessageDetail(id = it.arguments?.getString("id")!!)
            }
        }
    }
}

// Implementation of one of the screens in the navigation
@Composable
fun MessageDetail(id: String) {
    // .. Screen level content goes here
    val scrollState = rememberTransformingLazyColumnState()
    val transformationSpec = rememberTransformationSpec()

    ScreenScaffold(
        scrollState = scrollState,
    ) { contentPadding ->
        // Screen content goes here
        // ...

Чтобы узнать больше о навигации в Jetpack, ознакомьтесь с разделом Навигация с помощью Compose или пройдите лабораторную работу по навигации в Jetpack Compose.