navigationevent

  
Navigation Event लाइब्रेरी, सिस्टम बैक के साथ-साथ Predictive Back को हैंडल करने के लिए, KMP-first API उपलब्ध कराती है.
नया अपडेट स्टेबल रिलीज़ रिलीज़ कैंडिडेट बीटा रिलीज़ ऐल्फ़ा वर्शन
30 जुलाई, 2025 - - - 1.0.0-alpha05

डिपेंडेंसी का एलान करना

navigationevent पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.

अपने ऐप्लिकेशन या मॉड्यूल के लिए, build.gradle फ़ाइल में उन आर्टफ़ैक्ट की डिपेंडेंसी जोड़ें जिनकी आपको ज़रूरत है:

ग्रूवी

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

Kotlin

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

डिपेंडेंसी के बारे में ज़्यादा जानने के लिए, बिल्ड डिपेंडेंसी जोड़ना लेख पढ़ें.

सुझाव/राय दें या शिकायत करें

आपके सुझाव, शिकायत या राय से Jetpack को बेहतर बनाने में मदद मिलती है. अगर आपको कोई नई समस्या मिलती है या इस लाइब्रेरी को बेहतर बनाने के लिए आपके पास कोई सुझाव है, तो हमें बताएं. कृपया नई लाइब्रेरी बनाने से पहले, इस लाइब्रेरी में मौजूद मौजूदा समस्याओं को देखें. स्टार बटन पर क्लिक करके, किसी मौजूदा समस्या के लिए वोट किया जा सकता है.

नई समस्या बनाना

ज़्यादा जानकारी के लिए, Issue Tracker का दस्तावेज़ देखें.

इस आर्टफ़ैक्ट के लिए कोई रिलीज़ नोट नहीं है.

वर्शन 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

इसके अलावा, NavigationEventCallback पर मौजूद isEnabled प्रॉपर्टी अब उससे जुड़े डिसपैचर की चालू स्थिति का पालन करती है. इसका मतलब है कि कॉलबैक को सिर्फ़ तब चालू माना जाता है, जब कॉलबैक और उसके डिस्पैचर (इसमें उसके पूर्वज भी शामिल हैं) दोनों चालू हों. इससे यह पक्का होता है कि कॉलबैक को चालू करने पर, क्रम के हिसाब से कंट्रोल बना रहे. (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() विधि शुरू की गई है. dispose() को कॉल करने से, लिसनर बंद हो जाते हैं, ताकि मेमोरी लीक न हो. साथ ही, यह सभी चाइल्ड डिस्पैचर को बार-बार डिस्पोज़ करता है, डिस्पैचर के साथ रजिस्टर किए गए सभी कॉलबैक हटाता है, और इसे इसके पैरंट से अनलिंक करता है. इससे यह पक्का होता है कि जब डिस्पैचर की ज़रूरत नहीं होती है, तो संसाधनों को सही तरीके से रिलीज़ किया जाता है. (I9e985)

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

अगर डिस्पोज़ किए गए डिसपैचर पर किसी सार्वजनिक तरीके को कॉल किया जाता है, तो तुरंत IllegalStateException थ्रो कर दिया जाता है. इससे, बिना किसी सूचना के होने वाली गड़बड़ियों को रोकने में मदद मिलती है. साथ ही, डेवलपर को डेवलपमेंट के दौरान, गलत इस्तेमाल की पहचान करने में मदद मिलती है. (Ic2dc3)

  val callback2 = TestNavigationEventCallback()

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

ध्यान दें: हम एक नया NavigationEventDispatcherOwner कंपोज़ेबल पेश करेंगे. यह aosp/3692572 में, Compose UI के अंदर चाइल्ड डिस्पैचर को अपने-आप मैनेज करता है. हालांकि, यह बदलाव मौजूदा रिलीज़ में शामिल नहीं किया गया है. इसे अगली रिलीज़ में शामिल किया जाएगा.

Navigation Testing Library

  • navigationevent-testing लाइब्रेरी के लिए, टेस्टिंग की खास सुविधाएं देने वाला navigationevent-testing मॉड्यूल जोड़ा गया.navigationevent (0e50b6)
  • जांच के लिए, TestNavigationEventCallback नकली यूटिलिटी क्लास जोड़ें. यह कुकी, कॉलबैक के तरीके से किए गए कॉल रिकॉर्ड करती है. साथ ही, पुष्टि करने के लिए मिले NavigationEvent आइटम सेव करती है. (4a0246)
  • डिफ़ॉल्ट वैल्यू के साथ NavigationEvent इंस्टेंस बनाने के लिए, TestNavigationEvent फ़ेक यूटिलिटी फ़ंक्शन जोड़ा गया है. इससे नेविगेशन इवेंट प्रोसेसिंग के लिए यूनिट टेस्ट आसान हो जाती हैं. (3b63f5)
  • जांच के लिए, TestNavigationEventDispatcherOwner नकली यूटिलिटी क्लास जोड़ें. यह फ़ॉलबैक और चालू स्थिति में बदलाव वाले इवेंट की संख्या को ट्रैक करता है, ताकि टेस्ट में इंटरैक्शन की पुष्टि की जा सके. (c8753e)

एपीआई में हुए बदलाव

  • NavigationEventInputHandler को androidMain से commonMain में ले जाएं, ताकि यह KMP के सामान्य कोड में उपलब्ध हो. इवेंट भेजने के लिए, नए public send* तरीके जोड़ें. NavigationEventDispatcher पर डिसपैच फ़ंक्शन को public से internal में बदलें. अब उपयोगकर्ताओं को इवेंट भेजने के लिए, NavigationEventInputHandler का इस्तेमाल करना होगा. (Ia7114)
  • NavigationInputHandler का नाम बदलकर OnBackInvokedInputHandler करें. (I63405)

गड़बड़ियां ठीक की गईं

  • NavigationEventDispatcher को फिर से फ़ैक्टर किया गया है, ताकि इंटरमीडिएट लिस्ट ऐलोकेशन से बचा जा सके और कॉल बैक डिस्पैच की परफ़ॉर्मेंस को बेहतर बनाया जा सके. इससे ओवरहेड कम हो जाएगा. (I82702, I1a9d9)
  • NavigationEvent में touchX, touchY, और progress फ़ील्ड में @FloatRange एनोटेशन जोड़ें, ताकि कंपाइल टाइम पर वैल्यू की मान्य रेंज लागू की जा सके और एपीआई की सुरक्षा को बेहतर बनाया जा सके. (Iac0ec)

वर्शन 1.0.0-alpha04

2 जुलाई, 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha04 रिलीज़ हो गया है. वर्शन 1.0.0-alpha04 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • कंपोज़ करने के नियमों के मुताबिक, navigationevent-compose के लिए implementedInJetBrainsFork का इस्तेमाल किया गया है. साथ ही, commonStubs टारगेट जोड़ा गया है. JetBrains ने बदलाव का अनुरोध किया है. (f60c79)
  • सही स्टब जनरेट करने के लिए, Kotlin/Native के लिए Compose कंपाइलर प्लगिन का इस्तेमाल किया गया. सार्वजनिक एपीआई या उनके काम करने के तरीके पर कोई असर नहीं पड़ेगा. (1890c9)

वर्शन 1.0.0-alpha03

18 जून, 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha03 रिलीज़ हो गया है. वर्शन 1.0.0-alpha03 में ये कमिट शामिल हैं.

नई सुविधाएं

  • navigationevent लाइब्रेरी में Jetpack Compose की सुविधाओं को सपोर्ट करने के लिए, नया navigationevent-compose मॉड्यूल जोड़ा गया है. (980d78)
  • NavigationEvent Compose ने एक नई LocalNavigationEventDispatcherOwner लोकल कंपोज़िशन जोड़ी है. यह एक ऐसी वैल्यू दिखाता है जो नल हो सकती है, ताकि यह बेहतर तरीके से तय किया जा सके कि यह मौजूदा कंपोज़िशन में उपलब्ध है या नहीं. अगर मालिक का खाता नहीं मिलता है, तो अब NavigationEventHandler गड़बड़ी का मैसेज दिखाएगा. (62ffda)
  • NavigationEvent Compose में, NavigationEventHandler Composable का नया वर्शन जोड़ा गया है. इसका इस्तेमाल, (अनुमानित बैक जेस्चर) इवेंट को हैंडल करने के लिए किया जाता है. यह NavigationEvent ऑब्जेक्ट की Flow देता है. इन्हें आपको निलंबित करने वाले लैम्डा फ़ंक्शन में इकट्ठा करना होगा 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
  }
}

एपीआई में हुए बदलाव

  • अब हर NavigationEventCallback को एक बार में सिर्फ़ एक NavigationEventDispatcher के साथ रजिस्टर किया जा सकता है. इसे एक से ज़्यादा डिस्पैचर के साथ जोड़ने पर, IllegalStateException दिखेगा. ध्यान दें कि यह सुविधा, OnBackPressedDispatcher से अलग है. OnBackPressedDispatcher में एक से ज़्यादा डिस्पैचर की अनुमति होती है. (e82c19)
  • नेविगेशन के दौरान म्यूटेशन को रोकने के लिए, isPassThrough को val बनाया गया है. इससे NavigationEvent के डिसपैचिंग में समस्या आ सकती है. (I0b287)

वर्शन 1.0.0-alpha02

4 जून, 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha02 रिलीज़ हो गया है. वर्शन 1.0.0-alpha02 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • 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 लाइब्रेरी, सिस्टम बैक के साथ-साथ अनुमानित बैक को मैनेज करने के लिए, KMP-first API उपलब्ध कराती है. NavigationEventDispatcher, एक या उससे ज़्यादा NavigationEventCallback इंस्टेंस को रजिस्टर करने के लिए एक सामान्य एपीआई के तौर पर काम करता है, ताकि सिस्टम बैक इवेंट मिल सकें.
  • यह लेयर, androidx.activity में पहले रिलीज़ किए गए एपीआई के नीचे मौजूद होती है. इसका मकसद, ज़्यादा लेवल वाले कॉम्पोनेंट में Activity API का इस्तेमाल करने या Android फ़्रेमवर्क OnBackInvokedDispatcher API का सीधे तौर पर इस्तेमाल करने के लिए, कम राय वाला विकल्प उपलब्ध कराना है. Activity 1.12.0-alpha01 के तहत, androidx.activity एपीआई को नेविगेशन इवेंट एपीआई के आधार पर फिर से लिखा गया है.