ניווט באמצעות 'כתיבה' ב-Wear OS

רכיב הניווט ב-Android Jetpack מספק תמיכה באפליקציות של Jetpack פיתוח נייטיב. אפשר לעבור בין תכנים קומפוזביליים תוך שימוש בתשתית ובתכונות של רכיב הניווט.

בדף הזה מתוארים ההבדלים ביחס ל-Jetpack Navigation ב-Compose ל-Wear OS.

הגדרה

משתמשים ביחס התלות הבא בקובץ build.gradle של מודול האפליקציה:

Kotlin

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

משתמשים בו במקום הארטיפקט androidx.navigation:navigation-compose כי הוא מספק הטמעות חלופיות שספציפיות ל-Wear OS.

יצירת רכיבי ניווט, מארח וגרף

כדי לנווט באמצעות Compose ל-Wear OS, נדרשים אותם שלושה רכיבים שנדרשים באפליקציות שאינן ל-Wear OS: רכיב הבקרה של הניווט, המארח והתרשים.

משתמשים ב-rememberSwipeDismissableNavController() כדי ליצור מופע של WearNavigator, הטמעה של NavController שמתאימה לאפליקציות ל-Wear OS:

Kotlin

val navController = rememberSwipeDismissableNavController()

NavController הוא ה-API הראשי שמשמש לניווט באפליקציות Compose. הוא מאפשר לנווט בין רכיבי ה-Composable במארח הניווט, שב-Wear OS הוא SwipeDismissableNavHost.

Kotlin

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

בדומה ל-NavHost composable, הוא מקבל הפניה למסוף הניווט, למסלול ליעד ההתחלה ול-builder של תרשים הניווט, שמוצג כאן כ-lambda נגרר.

צריך לספק את יעד ההתחלה ב-Navigation Graph Builder, יחד עם כל יעדי היעד האחרים שצריך לאפשר ניווט אליהם באמצעות Navigation Controller.

באפליקציה ל-Wear OS, מגדירים את SwipeDismissableNavHost בתור תוכן של Scaffold כדי לתמוך ברכיבים ברמה העליונה, כמו שעון, אינדיקטור גלילה/מיקום ואינדיקטור דף. כדי להוסיף אובייקט TimeText למסך כברירת מחדל ולוודא שהאנימציה שלו פועלת כמו שצריך כשמנווטים בין המסכים, אפשר להשתמש באובייקט Horologist AppScaffold מעל SwipeDismissableNavHost וב-Horologist ScreenScaffold ברמת המסך. בנוסף, 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")!!)
        }
    }
}
// ...
// .. Screen level content goes here
val scrollState = rememberScrollState()

ScreenScaffold(scrollState = scrollState) {
    // Screen content goes here

למידע נוסף על ניווט ב-Jetpack פיתוח נייטיב, אפשר לעיין במאמר ניווט באמצעות Compose או להשתתף בסדנת הקוד בנושא ניווט ב-Jetpack פיתוח נייטיב.