navigationevent

  
ספריית Navigation Event מספקת API שמתמקד ב-KMP לטיפול בחזרה למערכת וגם בחיזוי של תנועת החזרה.
העדכון האחרון גרסה יציבה גרסה מועמדת להפצה גרסת בטא גרסת אלפא
‫30 ביולי 2025 - - - 1.0.0-alpha05

הצהרה על יחסי תלות

כדי להוסיף תלות ב-navigationevent, צריך להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאמר בנושא מאגר Maven של Google.

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

Groovy

dependencies {
    implementation "androidx.navigationevent:navigationevent:1.0.0-alpha05"
}

Kotlin

dependencies {
    implementation("androidx.navigationevent:navigationevent:1.0.0-alpha05")
}

מידע נוסף על יחסי תלות זמין במאמר הוספת יחסי תלות ב-Build.

משוב

המשוב שלכם עוזר לנו לשפר את Jetpack. נשמח לשמוע מכם אם תגלו בעיות חדשות או אם יש לכם רעיונות לשיפור הספרייה הזו. לפני שיוצרים ספרייה חדשה, כדאי לעיין בבעיות הקיימות בספרייה הזו. כדי להוסיף את ההצבעה שלכם לבעיה קיימת, לוחצים על לחצן הכוכב.

יצירת בעיה חדשה

מידע נוסף זמין במאמרי העזרה בנושא כלי המעקב אחר בעיות.

אין הערות לגבי הגרסה של הארטיפקט הזה.

גירסה 1.0

גרסה 1.0.0-alpha05

‫30 ביולי 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha05 משוחרר. גרסה 1.0.0-alpha05 מכילה את הקומטים האלה.

תמיכה בהיררכיה של הורה-ילד:

ל-NavigationEventDispatcher יכולים להיות עכשיו משגרים של הורה וצאצא, שיוצרים מבנה עץ היררכי. כך אירועי הניווט יכולים להתפשט ולנוהל בצורה גמישה יותר ברכיבי ממשק משתמש מורכבים של Compose, על ידי שיקוף ההיררכיה המבנית של ממשק המשתמש באמצעות משגרים משורשרים. (I194ac)

  // Create a parent dispatcher that will manage navigation events at a higher level.
  val parentDispatcher = NavigationEventDispatcher()

  // Create a child dispatcher linked to the parent, forming a hierarchy.
  val childDispatcher = NavigationEventDispatcher(parentDispatcher)

המאפיין ההיררכי isEnabled מאפשר שליטה במפיץ מלמעלה למטה. אם המדיניות isEnabled מוגדרת לערך false במרכז בקרה, היא משביתה אוטומטית את כל מרכזי הבקרה שנגזרים ממנו. התכונה הזו מאפשרת להשבית ביעילות ענפים שלמים של מערכת אירועי הניווט. (I9e985)

  // Disabling the child dispatcher disables all its callbacks and any of its children recursively.
  childDispatcher.isEnabled = false

בנוסף, המאפיין isEnabled ב-NavigationEventCallback פועל עכשיו בהתאם למצב ההפעלה של רכיב השליחה המשויך. כלומר, קריאה חוזרת נחשבת למופעלת רק אם גם הקריאה החוזרת עצמה וגם רכיב השליחה שלה (כולל רכיבי האב שלה) מופעלים. כך מובטח ניהול היררכי עקבי של הפעלת הקריאה החוזרת. (I1799a)

  // Create a test callback and add it to the child dispatcher.
  val callback1 = TestNavigationEventCallback(isEnabled = true)
  childDispatcher.addCallback(callback1)

  // Since the childDispatcher is disabled, the callback is effectively disabled as well.
  assertThat(callback1.isEnabled).isFalse()

הוספנו שיטה חדשה dispose() לניקוי נכון של רכיבי Dispatcher ורכיבי הצאצא שלהם. הקריאה ל-dispose() מפסיקה את המאזינים כדי למנוע דליפות זיכרון, משחררת באופן רקורסיבי את כל רכיבי ה-dispatcher של הצאצא, מסירה את כל הקריאות החוזרות שרשומות ב-dispatcher ומבטלת את הקישור שלו לרכיב האב. כך תוכלו לוודא שהמשאבים ישוחררו בצורה נכונה כשאין יותר צורך בצוותי השטח. (I9e985)

  // Dispose the child dispatcher to clean up resources.
  childDispatcher.dispose()

אם קוראים לשיטה ציבורית כלשהי ב-dispatcher שהוצא משימוש, מתרחשת שגיאת IllegalStateException באופן מיידי. כך אפשר למנוע כשלים שקטים ולעזור למפתחים לזהות שימוש לא תקין במהלך הפיתוח. (Ic2dc3)

  val callback2 = TestNavigationEventCallback()

  // Attempting to use a disposed dispatcher will throw an exception.
  assertThrows<IllegalStateException> {
      childDispatcher.addCallback(callback2)
  }

הערה: אנחנו נציג NavigationEventDispatcherOwnerרכיב חדש שאפשר להרכיב ממנו ממשק משתמש, שמנהל באופן אוטומטי את ה-dispatcher של הצאצא בממשק המשתמש של Compose ב-aosp/3692572. עם זאת, השינוי הזה לא נכלל בגרסה הנוכחית, והוא מתוכנן לגרסה הבאה.

Navigation Testing Library

  • הוספת מודול navigationevent-testing כדי לספק כלי בדיקה ייעודיים לספריית navigationevent. (0e50b6)
  • הוספת מחלקת כלי עזר פיקטיבית TestNavigationEventCallback לבדיקה. הוא מתעד קריאות לשיטת קריאה חוזרת ומאחסן פריטים שהתקבלו NavigationEvent כדי לתמוך באימות. (4a0246)
  • הוספתי פונקציית עזר פיקטיבית TestNavigationEvent כדי ליצור מופעים של NavigationEvent עם ערכי ברירת מחדל, וכך לפשט את בדיקות היחידה לעיבוד אירועי ניווט. (3b63f5)
  • הוספת מחלקת כלי עזר פיקטיבית TestNavigationEventDispatcherOwner לבדיקה. הוא עוקב אחרי מספרים של אירועים של חזרה למצב הקודם ושל שינוי מצב ההפעלה, כדי לתמוך באימות אינטראקציות בבדיקות. (c8753e)

שינויים ב-API

  • מעבירים את NavigationEventInputHandler מ-androidMain אל commonMain כדי שיהיה זמין בקוד המשותף של KMP. הוספת public send* שיטות חדשות לשליחת אירועים. שינוי פונקציות השליחה ב-NavigationEventDispatcher מ-public ל-internal; המשתמשים צריכים עכשיו להשתמש ב-NavigationEventInputHandler כדי לשלוח אירועים. (Ia7114)
  • שינוי השם של NavigationInputHandler לOnBackInvokedInputHandler. (I63405)

תיקוני באגים

  • מבצעים רפקטורינג של NavigationEventDispatcher כדי לצמצם את התקורה על ידי הימנעות מהקצאות של רשימות ביניים ושיפור הביצועים של שליחת קריאות חוזרות. ‫(I82702, ‏ I1a9d9)
  • הוספת הערות @FloatRange לשדות touchX,‏ touchY ו-progress ב-NavigationEvent כדי לאכוף טווחים של ערכים תקינים בזמן הקומפילציה ולשפר את הבטיחות של ה-API. (Iac0ec)

גרסה 1.0.0-alpha04

‫2 ביולי 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha04 משוחרר. גרסה 1.0.0-alpha04 מכילה את הקומטים האלה.

תיקוני באגים

  • השתמשתי ב-implementedInJetBrainsFork כדי navigationevent-compose והוספתי יעד commonStubs כדי להתאים למוסכמות של התכונה 'כתיבה בעזרת AI'. שינוי שבוקש על ידי JetBrains. (f60c79)
  • בוצע תיקון של היישום של התוסף של מהדר Compose ל-Kotlin/Native כדי להבטיח יצירה נכונה של קובצי stub. אין השפעה על ממשקי API ציבוריים או על אופן הפעולה שלהם. (1890c9)

גרסה 1.0.0-alpha03

‫18 ביוני 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha03 משוחרר. גרסה 1.0.0-alpha03 מכילה את הקומטים האלה.

תכונות חדשות

  • הוספנו מודול navigationevent-compose חדש כדי לתמוך בתכונות של Jetpack Compose בספריית navigationevent. (980d78)
  • NavigationEvent נוספה ל'יצירה' LocalNavigationEventDispatcherOwner יצירה מקומית חדשה. היא מחזירה ערך שניתן להגדרה כ-null כדי לקבוע טוב יותר אם היא זמינה בהרכב הנוכחי. מעכשיו, אם הבעלים הבסיסי לא יימצא, תופיע שגיאה ב-NavigationEventHandler. (62ffda)
  • NavigationEvent נוסף NavigationEventHandler Composable חדש ל-Compose כדי לטפל באירועים (תנועת חזרה עם חיזוי). היא מספקת Flow של NavigationEvent אובייקטים שצריך לאסוף בפונקציית ה-lambda להשעיה שסיפקת c42ba6:
NavigationEventHandler { progress: Flow<NavigationEvent> ->
  // This block is executed when the back gesture begins.
  try {
    progress.collect { backEvent ->
      // Handle gesture progress updates here.
    }
    // This block is executed if the gesture completes successfully.
  } catch (e: CancellationException) {
    // This block is executed if the gesture is cancelled
    throw e
  } finally {
    // This block is executed either the gesture is completed or cancelled
  }
}

שינויים ב-API

  • כל NavigationEventCallback יכול להיות רשום רק ב-NavigationEventDispatcher אחד בכל פעם. הוספה של NavigationEventCallback למספר מרכזי ניהול תגרום לשגיאה IllegalStateException. שימו לב שההתנהגות הזו שונה מOnBackPressedDispatcher, שמאפשרת שימוש בכמה מרכזי ניהול. (e82c19)
  • הפכנו את isPassThrough ל-val כדי למנוע מוטציה במהלך הניווט, שיכולה לשבש את השליחה של NavigationEvent. (I0b287)

גרסה 1.0.0-alpha02

‫4 ביוני 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha02 משוחרר. גרסה 1.0.0-alpha02 מכילה את ההתחייבויות האלה.

שינויים ב-API

  • מחליפים את בנאי המשנה של NavigationEventDispatcher בארגומנטים שמוגדרים כברירת מחדל. (I716a0)
  • הסרת מאפיין העדיפות מהמאפיין NavigationEventCallback. במקום זאת, מעבירים את העדיפות אל NavigationEventDispatcher.addCallback(). (I13cae)

תיקוני באגים

  • תוקנה בעיה ConcurrentModificationException שיכולה לקרות כשמתבצעת קריאה ל-NavigationEventCallback.remove() בגלל שינוי בו-זמני של הרשימה הפנימית של רכיבים שניתן לסגור. (b/420919815)

גרסה 1.0.0-alpha01

‫20 במאי 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha01 משוחרר. גרסה 1.0.0-alpha01 מכילה את הקומטים האלה.

תכונות חדשות

  • ספריית androidx.navigationevent מספקת API שמתמקד ב-KMP לטיפול בחזרה למערכת, וגם בחזרה עם חיזוי. ‫NavigationEventDispatcher משמש כממשקי API משותפים לרישום של מופע אחד או יותר של NavigationEventCallback לקבלת אירועים של חזרה למערכת.
  • השכבה הזו נמצאת מתחת לממשקי ה-API שפורסמו בעבר ב-androidx.activity, והיא נועדה להיות תחליף פחות דעתני לשימוש בממשקי Activity API ברכיבים ברמה גבוהה יותר או לשימוש ישיר בממשקי Android framework OnBackInvokedDispatcher API. ממשקי ה-API של androidx.activity נכתבו מחדש על בסיס ממשקי ה-API של אירועי הניווט כחלק מ-Activity 1.12.0-alpha01.