navigationevent

  
ไลบรารีเหตุการณ์การนำทางมี API ที่ใช้ KMP เป็นอันดับแรกสำหรับการจัดการการย้อนกลับของระบบและท่าทางสัมผัสย้อนกลับแบบคาดเดา
อัปเดตล่าสุด รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า รุ่นอัลฟ่า
8 ตุลาคม 2025 - - 1.0.0-beta01 -

การประกาศทรัพยากร Dependency

หากต้องการเพิ่มทรัพยากร Dependency ใน NavigationEvent คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google

เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle สำหรับ แอปหรือโมดูล

Groovy

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

Kotlin

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์

ความคิดเห็น

ความคิดเห็นของคุณช่วยเราปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว

สร้างปัญหาใหม่

ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา

ไม่มีบันทึกประจำรุ่นสำหรับอาร์ติแฟกต์นี้

รุ่น 1.0

เวอร์ชัน 1.0.0-beta01

8 ตุลาคม 2025

androidx.navigationevent:navigationevent-*:1.0.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-beta01 มีการเปลี่ยนแปลงเหล่านี้

การเปลี่ยนแปลง API

  • แก้ไขคำอธิบายประกอบ FloatRange สำหรับ NavigationEvent.touchX และ NavigationEvent.touchY ค่าเหล่านี้แสดงถึงพิกัดพิกเซลสัมบูรณ์และไม่มีขอบเขตบน 1.0 (I4b205, b/445989313)
  • ปรับโครงสร้าง Composable NavigationEventDispatcherOwner เป็น rememberNavigationEventDispatcherOwner ตอนนี้ฟังก์ชันจะแสดงผล NavigationEventDispatcherOwner โดยตรง หากต้องการระบุเจ้าของนี้ในการเรียบเรียงย่อย ให้ใช้ CompositionLocalProvider (I874b2, b/444446629)

เวอร์ชัน 1.0.0-alpha09

24 กันยายน 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha09 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha09 มีการเปลี่ยนแปลงเหล่านี้

การเปลี่ยนแปลง API

  • ใช้NavigationEventTransitionState.Idleออบเจ็กต์ Singleton โดยตรงแทนการสร้างอินสแตนซ์ Idle() (Ic7d9e, b/444734264)
  • สร้างตัวสร้างความสะดวกภายใน รับอินสแตนซ์ผ่าน NavigationEventDispatcher.history สาธารณะแทนการสร้างโดยตรง (I3b7e0, b/444734264)
  • ต้องสร้าง NavigationEventState ผ่าน rememberNavigationEventState ตอนนี้เครื่องมือสร้างอยู่ภายใน (Ie143c, b/444734264)
  • ใช้การใช้งาน onBackCompletedFallback แทน fallbackOnBackPressed และพารามิเตอร์ของตัวสร้าง ลักษณะการทำงานไม่เปลี่ยนแปลง โดยจะเรียกใช้เฉพาะในเหตุการณ์ย้อนกลับที่เสร็จสมบูรณ์แล้วและไม่ได้จัดการ (Idabe9, b/444734264)
  • ตอนนี้ตัวสร้างหลักของ NavigationEventHistory(mergedHistory, currentIndex) คือ internal ผู้ใช้ภายนอกต้องใช้ตัวสร้างสาธารณะ (ตัวสร้างที่ว่างเปล่าหรือตัวสร้างที่อิงตามพาร์ติชัน) เพื่อสร้างอินสแตนซ์ (I1c047, b/444734264)
  • ทำให้ View.setViewTreeNavigationEventDispatcherOwner ยอมรับเจ้าของที่กำหนดให้เป็น Null ได้ (Ic9eb6, b/444436762)
  • ตอนนี้ NavigationEventInfo เป็น abstract class แล้วไม่ใช่ interface อัปเดตการติดตั้งใช้งานที่กำหนดเองทั้งหมดให้รับค่าจากคลาส (เช่น data class MyInfo : NavigationEventInfo()) (I1e59c, b/444734264)
  • ระบบได้นำพร็อพเพอร์ตี้ NavigationEventDispatcher.state เดิมและฟังก์ชัน getState<T>() ออกแล้ว ใช้โฟลว์ dispatcher.transitionState (สำหรับความคืบหน้าของท่าทางสัมผัส) และ dispatcher.history (สำหรับสแต็กการนำทาง) ใหม่ที่แยกกัน (Ic2ceb, b/444734264)
  • ระบบจะแทนที่NavigationEventInput.onInfoChanged(...)การเรียกกลับ ใช้onHistoryChanged(history: NavigationEventHistory)การเรียกกลับใหม่เพื่อรับการอัปเดตเป็นออบเจ็กต์NavigationEventHistoryเดียว (I23e0b, b/444734264)
  • เปิดตัว NavigationEventDispatcher.history StateFlow ใหม่ทั่วโลก โฟลว์ที่ไม่ใช่โฟลว์ทั่วไปนี้ช่วยให้ผู้สังเกตการณ์ติดตามเฉพาะการเปลี่ยนแปลงในสแต็กการนำทางและยังคงเสถียรในระหว่างความคืบหน้าของท่าทางสัมผัส ซึ่งเป็นฟังก์ชันที่เทียบเท่ากับ transitionState (I1db10, b/444734264)
  • เปิดตัว NavigationEventDispatcher.transitionState StateFlow ใหม่ทั่วโลก โฟลว์ที่ไม่ใช่โฟลว์ทั่วไปนี้ช่วยให้ผู้สังเกตการณ์ติดตามเฉพาะสถานะท่าทางสัมผัส (ไม่ได้ใช้งาน/กำลังดำเนินการ) แยกจากประวัติได้ (I171fa, b/444734264)
  • แนะนำNavigationEventHistoryStateชั้นเรียน ซึ่งจะทำหน้าที่เป็น API หลักในการสังเกตประวัติข้อมูลการนำทาง โดยแยกจากสถานะท่าทางสัมผัส (I81ca5, b/444734264)
  • NavigationEvent ตอนนี้จะทําเครื่องหมายเป็น @Immutable ซึ่งช่วยให้คอมไพเลอร์ Compose เพิ่มประสิทธิภาพการเขียนใหม่ได้ (If78c7, b/444734264)
  • navigationevent-compose API ตัวแฮนเดิลได้รับการอัปเดตแล้ว ตอนนี้ NavigationEventHandler และ NavigationBackHandler (และตัวแปร) รองรับการโอเวอร์โหลดใหม่ที่ยอมรับ NavigationEventStates ที่ยกขึ้น ระบบจะยังคงใช้การโอเวอร์โหลดแบบง่าย (ใช้ currentInfo) และใช้โมเดลสถานะใหม่นี้ภายใน (Ic3251, b/444734264)
  • เพิ่มตัวยึดสถานะ @Stable NavigationEventState<T> ใหม่ลงในไลบรารี navigationevent-compose ออบเจ็กต์นี้รวมประวัติในเครื่องเข้ากับสถานะท่าทางสัมผัสในเครื่อง และจะเป็นลิงก์หลักระหว่าง rememberNavigationEventState กับ NavigationEventHandler (Ifb69f, b/444734264)
  • เพิ่มพร็อพเพอร์ตี้ transitionState: TransitionState ใหม่แบบสาธารณะและแบบอ่านอย่างเดียวไปยัง NavigationEventHandler ตอนนี้ตัวแฮนเดิลจะรักษาสถานะการเปลี่ยนของตัวเอง ซึ่งระบบภายนอกสามารถสังเกตได้ (I9acd2, b/444734264)
  • ขอแนะนำคลาสที่ปิดผนึกใหม่ของ TransitionState ซึ่งจะเป็น API หลักสำหรับการสังเกตสถานะท่าทางสัมผัส โดยแยกจากประวัติการนำทาง (Id4beb, b/444734264)
  • แสดง currentInfo, backInfo และ forwardInfo เป็นพร็อพเพอร์ตี้แบบสาธารณะที่อ่านได้อย่างเดียวใน NavigationEventHandler (Ia7636, b/444734264)
  • ตอนนี้การใช้งาน NavigationEventHandler ต้องระบุค่า initialInfo: T ให้กับตัวสร้างฐาน (Idcfea, b/444734264)
  • แทนที่ OnBackInvokedInput ด้วย OnBackInvokedOverlayInput หรือ OnBackInvokedDefaultInput (I5323f, b/428948766)
  • ทำเครื่องหมาย NavigationEventState เป็น @Immutable ซึ่งจะช่วยปรับปรุงประสิทธิภาพของ Compose โดยทำให้มั่นใจว่า Composables ที่สังเกตสถานะนี้จะข้ามการจัดองค์ประกอบใหม่ได้อย่างถูกต้อง (I399c8)
  • เปลี่ยนชื่อ NavigationEventInfo.NotProvided เป็น NavigationEventInfo.None; เพื่ออัปเดตการอ้างอิง ไม่มีการเปลี่ยนแปลงลักษณะการทำงาน (I5e2d4)
  • NavigationEventInfo ตอนนี้จะทําเครื่องหมายเป็น @Immutable ซึ่งช่วยให้คอมไพเลอร์ Compose เพิ่มประสิทธิภาพการเขียนใหม่ได้ (I7c112)
  • ปรับปรุงการยศาสตร์ของ Java ด้วยอินเทอร์เฟซที่สนุกสนานสำหรับการสำรองการดำเนินการย้อนกลับ (I8a860)
  • เปลี่ยนชื่อ onHasEnabledHandlerChanged เป็น onHasEnabledHandlersChanged ซึ่งจะอธิบายว่ารายงานการเรียกกลับเกี่ยวกับสถานะการเปิดใช้โดยรวมของแฮนเดิลทั้งหมด ไม่ใช่เพียงแฮนเดิลเดียว (I1af61, b/443711297)
  • นำ hasEnabledHandler() ออกจาก NavigationEventDispatcher; แล้วใช้ NavigationEventInput.onHasEnabledHandlersChanged แทน (Idef72, b/443711297)
  • เพิ่มonInfoChangedการเรียกกลับไปยัง NavigationEventInput เพื่อแจ้งให้ผู้ฟังทราบถึงการเปลี่ยนแปลงในประวัติการนำทาง ซึ่งจะให้บริบททั้งหมดของสแต็กปัจจุบัน ย้อนกลับ และไปข้างหน้า ทำให้อินพุตตอบสนองต่อข้อมูลตามบริบทได้ (I69a8b, b/443282983)
  • สร้าง NavigationEvent swipeEdge ให้เป็น @IntDef (Icee54, b/443950342)
  • เพิ่มพารามิเตอร์ priority ลงใน NavigationEventDispatcher.addInput เพื่อกำหนดขอบเขตของตัวจัดส่งให้มีความสำคัญระดับเดียว เหตุการณ์ต่างๆ เช่น onHasEnabledCallbacksChanged จะเริ่มทำงานเมื่อมีการเปลี่ยนแปลงการเรียกกลับที่ระดับความสำคัญนั้นเท่านั้น (I3e488, b/443711297)
  • เปลี่ยนชื่อพารามิเตอร์ NavigationEventDispatcher จาก parentDispatcher เป็น parent เพื่อความชัดเจน (Id4f1f, b/443801782)
  • นำ NavigationEventPriority ออกเพื่อแทนที่ด้วย @IntDef สำหรับผู้ใช้ Java (I10a9f, b/440514265)
  • บังคับใช้สัญญาตัวแฮนเดิลการนำทาง หาก NavigationEventHandler ตั้งค่า isBackEnabled หรือ isForwardEnabled เป็น true ตอนนี้คุณต้องลบล้าง onBackCompleted หรือ onForwardCompleted ตามลำดับ ตอนนี้การติดตั้งใช้งานเริ่มต้นจะส่งข้อยกเว้นเพื่อป้องกันไม่ให้เกิดข้อผิดพลาดแบบเงียบ (I17c62)
  • บังคับใช้ค่าลำดับความสำคัญที่ถูกต้องเมื่อเพิ่มตัวแฮนเดิลเหตุการณ์การนำทาง ตอนนี้การเรียกใช้ addHandler ที่มีลำดับความสำคัญที่ไม่รองรับจะทำให้เกิด IllegalArgumentException ซึ่งจะให้ความคิดเห็นทันทีสำหรับการใช้งานที่ไม่ถูกต้องในแพลตฟอร์มเป้าหมายทั้งหมด (I3c474)

การแก้ไขข้อบกพร่อง

  • ทำให้addHandler Idempotent และไม่สนใจการลงทะเบียนที่ซ้ำกัน (I052aa, b/444734264)
  • ซิงค์พร็อพเพอร์ตี้ NavigationEventState ไว้ในระหว่างการจัดองค์ประกอบใหม่ (Ib3b4d, b/444734264)
  • ตรวจสอบว่า NavigationEventInputs ได้รับข้อมูลบริบทปัจจุบัน (ปัจจุบัน ย้อนกลับ ไปข้างหน้า) ทันทีที่ลงทะเบียน (Ie65bf, b/443282983)

เวอร์ชัน 1.0.0-alpha08

10 กันยายน 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha08 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha08 มีการเปลี่ยนแปลงเหล่านี้

ฟีเจอร์ใหม่

  • เปิดตัว NavigationEventHandler API ที่ใช้ Lambda ซึ่งจะมาแทนที่ตัวแฮนเดิลที่อิงตามโฟลว์ จัดการท่าทางสัมผัสย้อนกลับและไปข้างหน้าด้วยการเรียกกลับแบบง่ายแทนการรวบรวมโฟลว์ ซึ่งจะช่วยลดข้อความเทมเพลตที่ต้องใช้บ่อยๆ และหลีกเลี่ยงปัญหาการยกเลิก จัดหา NavigationBackHandler และ NavigationForwardHandler เป็น API ที่กำหนดเป้าหมายเพื่อความสะดวก นำ NavigationEventHandler ที่อิงตามโฟลว์ออก แล้วย้ายข้อมูลไปยังการเรียกกลับใหม่ (I23bac, b/436248277)
  • อนุญาตให้ผู้ฟังที่ไม่ได้โต้ตอบเข้าถึง Back Stack ของการนำทางทั้งหมดผ่านข้อมูลย้อนกลับที่รวมกัน เปิดใช้ UI เพื่อแสดงตัวอย่างและประวัติการนำทางที่ซ้อนกันแทนที่จะจำกัดไว้ที่การเรียกกลับระดับบนสุด (I7a510, b/436248277)
  • เปิดตัวโมเดลย้อนกลับ/ปัจจุบัน/ไปข้างหน้าอย่างชัดเจนเพื่อชี้แจงสถานะการนำทางและรองรับการนำทางไปข้างหน้าด้วยตัวแฮนเดิลที่ซ้อนกัน (Ib86da, b/420443609)
  • เพิ่มวิธีการ onForward* และ isForwardEnabled ลงใน NavigationEventCallback (Ic100f, b/436248290)
  • เพิ่มการรองรับการนำทางไปข้างหน้าใน NavigationEventInput (I5734b)

การเปลี่ยนแปลง API

  • เปิดใช้การทดสอบเหตุการณ์การนำทางไปข้างหน้าด้วย TestNavigationEventCallback ใช้ฮุก isForwardEnabled และ onForward* (I21fb5, b/420443609)
  • เปลี่ยนชื่อการเรียกกลับ onEvent* เป็น onBack* ใน NavEvent (I228b3, b/436248290)
  • แปลง SwipeEdge เป็นคลาสแบบอินไลน์ (Id5e01)
  • ทำให้navigationeventไลบรารีทำงานร่วมกับ Java ได้ ตอนนี้โค้ด Java สามารถเข้าถึง API สาธารณะทั้งหมดได้อย่างเต็มรูปแบบ ซึ่งช่วยให้ผสานรวมเข้ากับโปรเจ็กต์ที่ใช้หลายภาษาหรือโปรเจ็กต์ที่ใช้ Java เท่านั้นได้อย่างราบรื่น (Ibc944,I5465f, I9fb1e, b/440532890b/443040294)
  • ชี้แจงบทบาท API โดยเปลี่ยนชื่อ NavigationEventCallback เป็น NavigationEventHandler การเปลี่ยนแปลงนี้แสดงให้เห็นถึงวัตถุประสงค์ของคลาสในการจัดการท่าทางสัมผัสการนำทางแบบหลายขั้นตอนได้ดียิ่งขึ้น ตอนนี้เมธอด addCallback ที่เกี่ยวข้องคือ addHandler (I2492a, b/443040331)

การแก้ไขข้อบกพร่อง

  • ป้องกันไม่ให้การย้อนกลับสำรองทำงานในการไปยังส่วนต่างๆ ไปข้างหน้า (I74814, b/436248290)
  • เพิ่มการรองรับการนำทางไปข้างหน้าแบบคาดการณ์ NavigationEvent ตอนนี้ API จัดการทั้งท่าทางสัมผัสย้อนกลับและไปข้างหน้าแล้ว ซึ่งช่วยให้การเคลื่อนไหวสอดคล้องกันสำหรับทิศทางการนำทางทั้ง 2 แบบ (Idc98c, b/436248290)
  • ป้องกันไม่ให้ IllegalStateException ขัดข้องระหว่างการจัดองค์ประกอบใหม่เมื่อนำ NavigationEventDispatcherOwner ขององค์ประกอบออก (Iff50c, b/412629020)
  • ตอนนี้ผู้ฟังที่ไม่ได้โต้ตอบจะเข้าถึงสแต็กการนำทางย้อนกลับทั้งหมดได้ผ่านข้อมูลย้อนกลับที่รวมกัน ซึ่งช่วยให้ UI แสดงตัวอย่างและประวัติการนำทางที่ซ้อนกันได้แทนที่จะจำกัดไว้ที่การเรียกกลับระดับบนสุด (I7a510, b/436248277)

เวอร์ชัน 1.0.0-alpha07

27 สิงหาคม 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha07 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha07 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • นำ NavigationEventDispatcher.onHasEnabledCallbacksChanged ออก (I50e97)
  • ทำให้ NavigationEventCallback.onEventCompleted() เป็นนามธรรม (I36b38)
  • เปลี่ยนวิธีการ NavigationEventCallback#on* เป็น protected อัปเดตรหัสการโทรเพื่อลบล้าง (I6b691)
  • เปลี่ยนชื่อฟังก์ชัน DirectNavigationEventInput (Iffb62)
  • เปลี่ยนชื่อ NavigationEventInput.onAttach เป็น onAdded (I2d0b8)
  • เปลี่ยนชื่อ NavigationEventInput.onDetach เป็น onRemoved (I2d0b8)
  • เปลี่ยนชื่อ NavigationEventInputHandler เป็น NavigationEventInput (I676a4)
  • เพิ่ม @EmptySuper ไปยัง NavigationEventInput.onHasEnabledCallbacksChanged (If9853)
  • ใช้ onAttach ใน NavigationEventInputHandler (I03648)
  • ใช้ onDetach ใน NavigationEventInputHandler (I03648)
  • ค่าเริ่มต้นNavigationEventCallbackจะเปิดใช้เมื่อสร้าง (Ic0188)
  • แทนที่ NavigationEventInput.addOnHasEnabledCallbacksChangedCallback ด้วย NavigationEventInput.onHasEnabledCallbacksChanged (I64e93)
  • ต้องใช้เทรดหลักสำหรับ NavigationEventDispatcher.addInput (Ic2930)
  • ต้องใช้เทรดหลักสำหรับ NavigationEventDispatcher.removeInput (Ic2930)
  • นำ Dispatcher.addOnHasEnabledCallbacksChangedCallback ออก แทนที่ด้วย Dispatcher.onHasEnabledCallbacksChanged (Ida3e3, b/436530096)

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่การเพิ่มแฮนเดิลที่แนบแล้วหรือการนำแฮนเดิลที่ไม่ได้แนบออกทำให้ตรรกะวงจรที่ถูกต้องทำงาน (I9e47b)

เวอร์ชัน 1.0.0-alpha06

13 สิงหาคม 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha06 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha06 มีการเปลี่ยนแปลงเหล่านี้

ฟีเจอร์ใหม่

Passive Listeners API

ตอนนี้คุณสามารถส่งข้อมูลบริบทที่กำหนดเองจากโฮสต์การนำทางใดก็ได้ และรับฟังแบบพาสซีฟการเปลี่ยนแปลงสถานะท่าทางสัมผัสจากที่ใดก็ได้ใน UI ซึ่งจะเปิดใช้ภาพเคลื่อนไหวที่รับรู้บริบทสำหรับการย้อนกลับแบบคาดเดาและการนำทางอื่นๆ ที่ขับเคลื่อนด้วยท่าทางสัมผัส

ฟีเจอร์นี้มี 2 ส่วน ได้แก่

  1. การระบุข้อมูล - ใช้ NavigationEventInfo เพื่อส่งข้อมูลที่กำหนดเอง
  2. สถานะการใช้งาน - ใช้ dispatcher.state (NavigationEventState) เพื่อสังเกตความคืบหน้าและบริบทของท่าทางสัมผัส
  • ตอนนี้ NavigationEventCallback ได้เปิดเผยเมธอด setInfo(currentInfo, previousInfo) เพื่อตั้งค่าบริบทของท่าทางสัมผัสในการเรียกครั้งเดียว (I1d5e7, b/424470518)
  • NavigationEventHandler เพิ่มการโอเวอร์โหลดใหม่ที่ยอมรับ currentInfo และ previousInfo ซึ่งทําให้เป็น API หลักสําหรับการระบุบริบทในแอป Compose (I6ecd3, b/424470518)

ตัวอย่าง

  data class MyScreenInfo(val screenName: String) : NavigationEventInfo

  NavigationEventHandler(
      enabled = true,
      currentInfo = MyScreenInfo("Details Screen"),
      previousInfo = MyScreenInfo("Home Screen")
  ) { /* Handle back completion */ }
  • NavigationEventDispatcher ตอนนี้แสดง dispatcher.state และ dispatcher.getState<T>() (If7fae, Ia90ca, b/424470518) แล้ว API ที่อิงตาม StateFlow เหล่านี้ช่วยให้ UI ใดก็ตามสังเกตความคืบหน้าของท่าทางสัมผัสและข้อมูลตามบริบทได้โดยไม่ต้องจัดการเหตุการณ์โดยตรง

ตัวอย่าง

  val gestureState by LocalNavigationEventDispatcherOwner.current!!
      .navigationEventDispatcher
      .state
      .collectAsState()

  val progress = gestureState.progress // Returns latestEvent.progress or 0F

  when (val state = gestureState) {
      is InProgress -> {
          val toScreen = state.currentInfo as MyScreenInfo
          val fromScreen = state.previousInfo as MyScreenInfo
          println("Navigating from ${fromScreen.screenName} to ${toScreen.screenName}")
      }
      is Idle -> { /* Idle state */ }
  }
  • เพิ่มพร็อพเพอร์ตี้ progress ลงใน NavigationEventState (I7b196) ที่แสดงผล latestEvent.progress เมื่อดำเนินการอยู่ หรือ 0F ในกรณีอื่นๆ

    val progress = state.progress
    
  • เพิ่ม NavigationEventDispatcherOwner composable เพื่อสร้าง ลิงก์ และทิ้งอินสแตนซ์ NavigationEventDispatcher ตามลำดับชั้น เปิดใช้การควบคุมแบบไดนามิกของสถานะที่เปิดใช้ของ Dispatcher และการล้างข้อมูลอัตโนมัติ

    @Composable
    fun Sample() {
        NavigationEventDispatcherOwner(enabled = true) {
            val localDispatcherOwner = LocalNavigationEventDispatcherOwner.current
        }
    }
    

การเปลี่ยนแปลง API

  • พารามิเตอร์ isPassthrough ถูกนำออกจาก NavigationEventCallback แล้ว (I99028, b/424470518)
  • ตอนนี้ตัวสร้าง NavigationEventState เป็นแบบภายในแล้ว สำหรับการทดสอบ ให้อัปเดตสถานะ (ค่าเริ่มต้นคือ Idle) ผ่าน DirectNavigationEventInputHandler เรียกใช้ handleOnStarted หรือ handleOnProgressed เพื่อตั้งค่าสถานะเป็น InProgress และเรียกใช้ handleOnCompleted หรือ handleOnCancelled เพื่อเปลี่ยนกลับเป็น Idle หากต้องการอัปเดต NavigationEventInfo ให้ใช้ NavigationEventCallback.setInfo (I93dca, b/424470518)
  • เพิ่มพารามิเตอร์เริ่มต้นลงใน NavigationEvent เพื่อให้สร้างอินสแตนซ์ได้ง่ายขึ้นและลดความซับซ้อนของการทดสอบ ซึ่งควรใช้แทน TestNavigationEvent (I5dc49, I232f4)
  • เพิ่ม TestNavigationEventCallback สำหรับทดสอบเหตุการณ์การนำทางที่มีสถานะปัจจุบัน/ก่อนหน้าเฉพาะ (Idd22e, b/424470518)
  • NavigationEventInputHandler ได้รับการเปลี่ยนเป็นคลาสแบบนามธรรมเพื่อแทนที่ AbstractNavigationEventInputHandler ก่อนหน้าด้วยการติดตั้งใช้งานใน DirectNavigationEventInputHandler (Iadde5, Ifed40I3897c, b/432616296, b/435416924)
  • ฟังก์ชัน send* ใน NavigationEventInputHandler มีการเปลี่ยนชื่อคำนำหน้าเป็น handle* (Iffcaf)
  • ตอนนี้ OnBackInvokedInputHandler ได้ขยายเวลา abstract NavigationInputHandler ที่เพิ่งเปิดตัว (Ib45aa)
  • เปลี่ยน NavigationEventDispatcherOwner ให้ต้องมี Dispatcher หลักที่คุณต้องส่ง null อย่างชัดเจนเพื่อสร้าง Dispatcher รูท (Ia6f64, b/431534103)

การแก้ไขข้อบกพร่อง

  • เพิ่มประสิทธิภาพด้วยการหลีกเลี่ยงการคัดลอกคอลเล็กชันใน NavigationEventDispatcher.dispose() (I4ab09)
  • แก้ไขปัญหาที่ NavigationEventHandler ไม่ตอบสนองต่อการเปลี่ยนแปลงสถานะที่เปิดใช้อย่างถูกต้อง (Ia5268,I19bec, I5be5c, b/431534103)

ข้อมูลอัปเดตเกี่ยวกับเอกสาร

  • KDocs สำหรับ NavigationEvent ได้รับการขยายความเพื่อชี้แจงบทบาทในฐานะเครื่องมือรวมเหตุการณ์และลักษณะการทำงานของพร็อพเพอร์ตี้รายละเอียดในประเภทการนำทางต่างๆ (ท่าทางสัมผัส การคลิก) (I91e8d)
  • อัปเดตเอกสารประกอบสำหรับ Compose API ของการจัดการการกลับของระบบ (BackHandler, PredictiveBackHandler, NavigationEventHandler) เพื่อเรียกใช้ลักษณะการทำงานโดยเฉพาะเกี่ยวกับลำดับการเรียกกลับ (I7ab94, )

การอัปเดตการขึ้นต่อกัน

  • NavigationEvent ตอนนี้ขึ้นอยู่กับ Compose Runtime 1.9.0-beta03 ซึ่งช่วยให้ชิ้นงาน navigationevent-compose รองรับเป้าหมาย KMP ทั้งหมดได้ (Ia1b87)

เวอร์ชัน 1.0.0-alpha05

30 กรกฎาคม 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha05 มีการคอมมิตเหล่านี้

การรองรับลำดับชั้นหลัก-ย่อย:

ตอนนี้ NavigationEventDispatcher สามารถมีตัวจัดสรรหลักและย่อย ซึ่งจะสร้างโครงสร้างแบบต้นไม้ตามลำดับชั้น ซึ่งจะช่วยให้เหตุการณ์การนำทางเผยแพร่และจัดการได้อย่างยืดหยุ่นมากขึ้นในคอมโพเนนต์ UI ของ Compose ที่ซับซ้อนโดยการแสดงลําดับชั้นโครงสร้างของ UI ผ่าน Dispatcher ที่เชื่อมโยงกัน (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 ใน Dispatcher ระบบจะปิดใช้ Dispatcher ทั้งหมดที่สืบทอดมาจาก Dispatcher นั้นโดยอัตโนมัติ ฟีเจอร์นี้ช่วยให้ปิดทั้งกิ่งก้านของระบบเหตุการณ์การนำทางได้อย่างมีประสิทธิภาพ (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() จะหยุดการทำงานของ Listener เพื่อป้องกันการรั่วไหลของหน่วยความจำ ยกเลิกการจัดสรร Dispatcher ย่อยทั้งหมดแบบเรียกซ้ำ นำ Callback ทั้งหมดที่ลงทะเบียนไว้กับ Dispatcher ออก และยกเลิกการลิงก์ Dispatcher กับ 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 Composable ใหม่ที่จะจัดการ Dispatcher ของ Child ภายใน Compose UI โดยอัตโนมัติใน aosp/3692572 อย่างไรก็ตาม การเปลี่ยนแปลงนี้ไม่ได้รวมอยู่ในการเปิดตัวปัจจุบัน และมีแผนที่จะรวมไว้ในการเปิดตัวครั้งถัดไป

คลังการทดสอบการนำทาง

  • เพิ่มnavigationevent-testingโมดูลเพื่อจัดเตรียมยูทิลิตีการทดสอบเฉพาะสำหรับไลบรารี navigationevent (0e50b6)
  • เพิ่มคลาสยูทิลิตีปลอม TestNavigationEventCallback สำหรับการทดสอบ โดยจะบันทึกการเรียกเมธอด Callback และจัดเก็บรายการ 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 ให้ตรงกับรูปแบบของ Compose ขอเปลี่ยนแปลงโดย 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 Compose ได้เพิ่มLocalNavigationEventDispatcherOwnerการเรียบเรียงเพลงในพื้นที่ใหม่ โดยจะแสดงผลค่าที่อนุญาตให้เป็น Null เพื่อให้ระบุได้ดียิ่งขึ้นว่าค่าดังกล่าวพร้อมใช้งานในองค์ประกอบปัจจุบันหรือไม่ ตอนนี้ NavigationEventHandler จะแสดงข้อผิดพลาดหากไม่พบเจ้าของที่เกี่ยวข้อง (62ffda)
  • NavigationEvent Compose ได้เพิ่ม NavigationEventHandler Composable ใหม่เพื่อจัดการเหตุการณ์ (ท่าทางสัมผัสย้อนกลับแบบคาดการณ์) โดยจะให้ 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 ได้เพียงรายการเดียวในแต่ละครั้ง การเพิ่มลงในผู้จัดส่งหลายรายจะทำให้เกิด 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 อย่างน้อย 1 รายการเพื่อรับเหตุการณ์ย้อนกลับของระบบ
  • เลเยอร์นี้อยู่ใต้ API ที่เปิดตัวก่อนหน้านี้ใน androidx.activity และมีจุดมุ่งหมายเพื่อเป็นตัวแทนที่ยืดหยุ่นกว่าในการใช้ Activity API ในคอมโพเนนต์ระดับสูงขึ้น หรือใช้ API ของเฟรมเวิร์ก Android OnBackInvokedDispatcher โดยตรง เราได้เขียน API ของ androidx.activity ใหม่โดยใช้ Navigation Event API เป็นส่วนหนึ่งของ Activity 1.12.0-alpha01