navigationevent

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

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

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

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

Groovy

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

Kotlin

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

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

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

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

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

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

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

वर्शन 1.0

वर्शन 1.0.0-alpha06

13 अगस्त, 2025

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

नई सुविधाएं

Passive Listeners API

अब किसी भी नेविगेशन होस्ट से कॉन्टेक्स्ट के हिसाब से कस्टम जानकारी पास की जा सकती है. साथ ही, अपने यूज़र इंटरफ़ेस (यूआई) में कहीं से भी, जेस्चर की स्थिति में होने वाले बदलावों को पैसिव तरीके से सुना जा सकता है. इससे, प्रिडिक्टिव बैक और जेस्चर से कंट्रोल किए जाने वाले अन्य नेविगेशन के लिए, कॉन्टेक्स्ट अवेयर ऐनिमेशन चालू हो जाते हैं.

इस सुविधा के दो हिस्से हैं:

  1. जानकारी देना - कस्टम डेटा को ले जाने के लिए, NavigationEventInfo का इस्तेमाल करें.
  2. इस्तेमाल की जा रही स्थिति - जेस्चर की प्रोग्रेस और कॉन्टेक्स्ट को देखने के लिए, dispatcher.state (NavigationEventState) का इस्तेमाल करें.
  • NavigationEventCallback अब एक ही कॉल में जेस्चर का कॉन्टेक्स्ट सेट करने के लिए, setInfo(currentInfo, previousInfo) तरीके का इस्तेमाल किया जा सकता है (I1d5e7, b/424470518).
  • NavigationEventHandler एक नया ओवरलोड जोड़ता है, जो currentInfo और previousInfo को स्वीकार करता है. इससे यह 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) को दिखाता है. StateFlow पर आधारित ये एपीआई, किसी भी यूज़र इंटरफ़ेस (यूआई) को इवेंट को सीधे तौर पर हैंडल किए बिना, जेस्चर की प्रोग्रेस और कॉन्टेक्स्ट के हिसाब से डेटा देखने की अनुमति देते हैं.

उदाहरण:

  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 */ }
  }
  • NavigationEventState (I7b196) में progress प्रॉपर्टी जोड़ें. इससे प्रोसेस जारी रहने पर latestEvent.progress वैल्यू मिलती है. इसके अलावा, 0F वैल्यू मिलती है:

    val progress = state.progress
    
  • NavigationEventDispatcherOwner कंपोज़ेबल जोड़कर, NavigationEventDispatcher इंस्टेंस को क्रम से बनाया, लिंक किया, और हटाया जा सकता है. इससे डिसपैचर की चालू स्थिति को डाइनैमिक तरीके से कंट्रोल करने और अपने-आप साफ़ होने की सुविधा चालू होती है.

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

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

  • isPassthrough पैरामीटर को NavigationEventCallback से हटा दिया गया है. (I99028, b/424470518)
  • NavigationEventState कंस्ट्रक्टर अब इंटरनल हैं. जांच करने के लिए, DirectNavigationEventInputHandler की मदद से स्थिति को अपडेट करें. यह डिफ़ॉल्ट रूप से Idle पर सेट होती है. स्टेट को InProgress पर सेट करने के लिए, handleOnStarted या handleOnProgressed को कॉल करें. साथ ही, इसे Idle पर वापस लाने के लिए, handleOnCompleted या handleOnCancelled को कॉल करें. NavigationEventInfo को अपडेट करने के लिए, NavigationEventCallback.setInfo का इस्तेमाल करें. (I93dca, b/424470518)
  • NavigationEvent में डिफ़ॉल्ट पैरामीटर जोड़े गए हैं, ताकि इसे आसानी से इंस्टैंटिएट किया जा सके और टेस्टिंग को आसान बनाया जा सके. इनका इस्तेमाल TestNavigationEvent की जगह किया जाना चाहिए. (I5dc49, I232f4)
  • हमने TestNavigationEventCallback जोड़ा है. इससे, नेविगेशन इवेंट की जांच की जा सकेगी. इसके लिए, मौजूदा/पिछली स्थितियां तय की जा सकेंगी. (Idd22e, b/424470518)
  • NavigationEventInputHandler को ऐब्स्ट्रैक्ट क्लास में बदल दिया गया है, ताकि पिछले AbstractNavigationEventInputHandler को DirectNavigationEventInputHandler (Iadde5, Ifed40I3897c, b/432616296, b/435416924) में लागू किया जा सके
  • NavigationEventInputHandler में मौजूद send* फ़ंक्शन के प्रीफ़िक्स का नाम बदलकर handle* कर दिया गया है. (Iffcaf)
  • OnBackInvokedInputHandler अब नई abstract NavigationInputHandler की सुविधा देता है. (Ib45aa)
  • NavigationEventDispatcherOwner को बदलकर, माता-पिता के डिस्पैचर की ज़रूरत वाली सुविधा में बदल दिया गया है. इसमें रूट डिस्पैचर बनाने के लिए, आपको null को साफ़ तौर पर पास करना होगा. (Ia6f64, b/431534103)

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

  • NavigationEventDispatcher.dispose() में कलेक्शन की कॉपी बनाने से बचने की वजह से, बेहतर परफ़ॉर्मेंस मिली. (I4ab09)
  • उस समस्या को ठीक किया गया है जिसकी वजह से, NavigationEventHandler के चालू होने की स्थिति में बदलाव होने पर, वह सही तरीके से जवाब नहीं देता था. (Ia5268,I19bec, I5be5c, b/431534103)

Docs से जुड़े अपडेट

  • 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 में पैरंट और चाइल्ड डिस्पैचर हो सकते हैं. इससे हैरारकी वाला ट्री स्ट्रक्चर बनता है. इससे नेविगेशन इवेंट को, 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 एपीआई को नेविगेशन इवेंट एपीआई के आधार पर फिर से लिखा गया है.