navigationevent

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

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

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

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

Groovy

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

Kotlin

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

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

ความคิดเห็น

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

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

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

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

รุ่น 1.0

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