navigationevent

  
Navigation Event kitaplığı, sistemde geri gitme ve Tahmini Geri Gitme işlemlerini yönetmek için KMP öncelikli bir API sağlar.
Son Güncelleme Kararlı sürüm Sürüm Adayı Beta Sürümü Alfa sürümü
27 Ağustos 2025 - - - 1.0.0-alpha07

Bağımlılıkları bildirme

navigationevent'e bağımlılık eklemek için Google Maven deposunu projenize eklemeniz gerekir. Daha fazla bilgi için Google'ın Maven deposunu okuyun.

Uygulamanız veya modülünüz için build.gradle dosyasına ihtiyacınız olan yapılarla ilgili bağımlılıkları ekleyin:

Groovy

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

Kotlin

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

Bağımlılıklar hakkında daha fazla bilgi için Derleme bağımlılıkları ekleme başlıklı makaleyi inceleyin.

Geri bildirim

Geri bildiriminiz Jetpack'in iyileştirilmesine yardımcı olur. Yeni sorunlar keşfederseniz veya bu kitaplığı iyileştirmeye yönelik fikirleriniz olursa lütfen bize bildirin. Yeni bir sorun oluşturmadan önce lütfen bu kitaplıktaki mevcut sorunlara göz atın. Yıldız düğmesini tıklayarak mevcut bir soruna oyunuzu ekleyebilirsiniz.

Yeni sorun oluşturma

Daha fazla bilgi için Sorun İzleyici belgelerini inceleyin.

Bu yapıyla ilgili sürüm notu yok.

Sürüm 1.0

Sürüm 1.0.0-alpha07

27 Ağustos 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha07 iptal edilir. 1.0.0-alpha07 sürümü bu commit'leri içerir.

API Değişiklikleri

  • NavigationEventDispatcher.onHasEnabledCallbacksChanged öğesini kaldırın. (I50e97)
  • NavigationEventCallback.onEventCompleted() adlı kullanıcıyı katkıda bulunan yapın. (I36b38)
  • NavigationEventCallback#on* yöntemlerini protected olarak değiştirin. Geçersiz kılmak için arama kodunu güncelleyin. (I6b691)
  • DirectNavigationEventInput işlevlerini yeniden adlandırın. (Iffb62)
  • NavigationEventInput.onAttach öğesini onAdded olarak yeniden adlandırın. (I2d0b8)
  • NavigationEventInput.onDetach öğesini onRemoved olarak yeniden adlandırın. (I2d0b8)
  • NavigationEventInputHandler öğesini NavigationEventInput olarak yeniden adlandırın. (I676a4)
  • @EmptySuper adlı kişiyi NavigationEventInput.onHasEnabledCallbacksChanged listesine ekleyin. (If9853)
  • NavigationEventInputHandler içinde onAttach uygulayın. (I03648)
  • NavigationEventInputHandler içinde onDetach uygulayın. (I03648)
  • Varsayılan olarak, oluşturulduğunda NavigationEventCallback etkin olur. (Ic0188)
  • NavigationEventInput.addOnHasEnabledCallbacksChangedCallback yerine NavigationEventInput.onHasEnabledCallbacksChanged koyun. (I64e93)
  • NavigationEventDispatcher.addInput için ana iş parçacığını zorunlu kılın. (Ic2930)
  • NavigationEventDispatcher.removeInput için ana iş parçacığını zorunlu kılın. (Ic2930)
  • Dispatcher.addOnHasEnabledCallbacksChangedCallback öğesini kaldırın. Dispatcher.onHasEnabledCallbacksChanged ile değiştirin. (Ida3e3, b/436530096)

Hata Düzeltmeleri

  • Hâlihazırda eklenmiş bir işleyiciyi eklemenin veya eklenmemiş bir işleyiciyi kaldırmanın yanlış yaşam döngüsü mantığını tetiklediği hata düzeltildi. (I9e47b)

Sürüm 1.0.0-alpha06

13 Ağustos 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha06 iptal edilir. 1.0.0-alpha06 sürümü bu commit'leri içerir.

Yeni Özellikler

Passive Listeners API

Artık herhangi bir gezinme ana makinesinden özel bağlamsal bilgiler iletebilir ve kullanıcı arayüzünüzün herhangi bir yerinden hareket durumu değişikliklerini pasif olarak dinleyebilirsiniz. Bu ayar, tahmine dayalı geri hareketi ve diğer hareket tabanlı gezinme için bağlama duyarlı animasyonları etkinleştirir.

Bu özellik iki bölümden oluşur:

  1. Bilgi Sağlama: Özel verileri taşımak için NavigationEventInfo kullanın.
  2. Tüketim Durumu: Hareket ilerlemesini ve bağlamını gözlemlemek için dispatcher.state (NavigationEventState) kullanın.
  • NavigationEventCallback artık tek bir çağrıda hareket bağlamını ayarlamak için setInfo(currentInfo, previousInfo) yöntemini kullanıma sunuyor (I1d5e7, b/424470518).
  • NavigationEventHandler, currentInfo ve previousInfo parametrelerini kabul eden yeni bir aşırı yükleme ekleyerek Compose uygulamalarında bağlam sağlamak için kullanılan birincil API haline gelir (I6ecd3, b/424470518).

Örnek:

  data class MyScreenInfo(val screenName: String) : NavigationEventInfo

  NavigationEventHandler(
      enabled = true,
      currentInfo = MyScreenInfo("Details Screen"),
      previousInfo = MyScreenInfo("Home Screen")
  ) { /* Handle back completion */ }
  • NavigationEventDispatcher artık dispatcher.state ve dispatcher.getState<T>()'yi (If7fae, Ia90ca, b/424470518) kullanıma sunuyor. Bu StateFlow tabanlı API'ler, herhangi bir kullanıcı arayüzünün etkinliği doğrudan işlemeye gerek kalmadan hareket ilerlemesini ve bağlamsal verileri gözlemlemesine olanak tanır.

Örnek:

  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 */ }
  }
  • Devam ederken latestEvent.progress, aksi takdirde 0F değerini döndüren progress özelliğini NavigationEventState'ye (I7b196) ekleyin:

    val progress = state.progress
    
  • NavigationEventDispatcherOwner composable ekleyerek NavigationEventDispatcher örneklerini hiyerarşik olarak oluşturun, bağlayın ve kaldırın. Dağıtıcının etkin durumunun dinamik kontrolünü ve otomatik temizlemeyi etkinleştirin.

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

API Değişiklikleri

  • isPassthrough parametresi, NavigationEventCallback öğesinden kaldırıldı. (I99028, b/424470518)
  • NavigationEventState oluşturucuları artık dahili. Test için durumu DirectNavigationEventInputHandler üzerinden güncelleyin (varsayılan olarak Idle ayarlanır). Durumu InProgress olarak ayarlamak için handleOnStarted veya handleOnProgressed'u, Idle olarak geri döndürmek için handleOnCompleted veya handleOnCancelled'i arayın. NavigationEventInfo uygulamasını güncellemek için NavigationEventCallback.setInfo uygulamasını kullanın. (I93dca, b/424470518)
  • Daha kolay örnek oluşturmaya olanak tanımak ve TestNavigationEvent yerine kullanılması gereken testleri basitleştirmek için NavigationEvent öğesine varsayılan parametreler eklendi. (I5dc49, I232f4)
  • Belirli mevcut/önceki durumlarla gezinme etkinliklerini test etmek için TestNavigationEventCallback eklendi. (Idd22e, b/424470518)
  • NavigationEventInputHandler, önceki AbstractNavigationEventInputHandler yerine DirectNavigationEventInputHandler'de bir uygulama ile değiştirilmek üzere soyut bir sınıf haline getirildi (Iadde5, Ifed40I3897c, b/432616296, b/435416924)
  • NavigationEventInputHandler içindeki send* işlevlerinin ön ekleri handle* olarak yeniden adlandırıldı. (Iffcaf)
  • OnBackInvokedInputHandler, yeni abstract NavigationInputHandler kapsamını genişletiyor. (Ib45aa)
  • NavigationEventDispatcherOwner, kök dağıtıcı oluşturmak için null'yi açıkça iletmeniz gereken bir üst dağıtıcı gerektirecek şekilde değiştirildi. (Ia6f64, b/431534103)

Hata Düzeltmeleri

  • NavigationEventDispatcher.dispose() içinde koleksiyon kopyalarından kaçınarak verimliliği artırdı. (I4ab09)
  • NavigationEventHandler simgesinin etkin durumundaki değişikliklere doğru şekilde yanıt vermemesi sorunu düzeltildi. (Ia5268,I19bec, I5be5c, b/431534103)

Dokümanlar'daki yenilikler

  • NavigationEvent ile ilgili KDocs, birleşik etkinlik sarmalayıcısı ve farklı gezinme türlerindeki (hareketler, tıklamalar) ayrıntı özelliği davranışı olarak rolünü netleştirmek için genişletildi. (I91e8d)
  • Geri çağırma sırasıyla ilgili davranışa özellikle dikkat çekmek için Compose API'leri (BackHandler, PredictiveBackHandler, NavigationEventHandler) ile sistem geri işlemesiyle ilgili dokümanlar güncellendi. (I7ab94, )

Bağımlılık Güncellemesi

  • NavigationEvent artık navigationevent-compose yapısının tüm KMP hedeflerini desteklemesini sağlayan Compose Runtime 1.9.0-beta03'e bağlıdır. (Ia1b87)

Sürüm 1.0.0-alpha05

30 Temmuz 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha05 iptal edilir. 1.0.0-alpha05 sürümü bu commit'leri içerir.

Üst-Alt Öğeler Hiyerarşisi Desteği:

Bir NavigationEventDispatcher artık hiyerarşik bir ağaç yapısı oluşturan üst ve alt dağıtıcılara sahip olabilir. Bu sayede, zincirleme göndericiler aracılığıyla kullanıcı arayüzünün yapısal hiyerarşisini yansıtarak gezinme etkinliklerinin yayılması ve karmaşık Compose kullanıcı arayüzü bileşenlerinde daha esnek bir şekilde yönetilmesi sağlanır. (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)

Hiyerarşik isEnabled özelliği, bir dağıtıcı üzerinde yukarıdan aşağıya kontrol sağlar. Bir dağıtıcıda isEnabled, false olarak ayarlandığında tüm alt dağıtıcıları otomatik olarak devre dışı bırakır. Bu özellik, gezinme etkinliği sisteminin tüm dallarının verimli bir şekilde kapatılmasını sağlar. (I9e985)

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

Ayrıca, NavigationEventCallback üzerindeki isEnabled özelliği artık ilişkili dağıtıcısının etkinleştirilmiş durumuna saygı duyuyor. Bu nedenle, geri arama etkinleştirilmiş olarak kabul edilmek için hem geri aramanın kendisinin hem de göndericisinin (üst öğeleri dahil) etkinleştirilmesi gerekir. Böylece, geri arama etkinleştirme üzerinde tutarlı bir hiyerarşik kontrol sağlanır. (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()

Göndericilerin ve alt öğelerinin düzgün şekilde temizlenmesi için yeni bir dispose() yöntem kullanıma sunuldu. Calling dispose(), dinleyicileri durdurarak bellek sızıntılarını önler, tüm alt dağıtıcıları yinelemeli olarak kaldırır, dağıtıcıya kaydedilen tüm geri çağırma işlemlerini kaldırır ve dağıtıcının üst öğeyle bağlantısını kaldırır. Bu sayede, göndericilere artık ihtiyaç duyulmadığında kaynakların doğru şekilde serbest bırakılması sağlanır. (I9e985)

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

Atılan bir dağıtıcıda herkese açık bir yöntem çağrılırsa hemen bir IllegalStateException oluşturulur. Bu, sessiz hataları önler ve geliştiricilerin geliştirme sırasında uygunsuz kullanımı belirlemesine yardımcı olur. (Ic2dc3)

  val callback2 = TestNavigationEventCallback()

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

Not: aosp/3692572'de Compose kullanıcı arayüzünde alt dağıtıcıyı otomatik olarak yöneten yeni bir NavigationEventDispatcherOwner Composable kullanıma sunacağız. Ancak bu değişiklik mevcut sürümde yer almadı ve bir sonraki sürümde kullanıma sunulması planlanıyor.

Gezinme Testi Kitaplığı

  • navigationevent kitaplığı için özel test yardımcı programları sağlamak üzere navigationevent-testing modülünü ekleyin. (0e50b6)
  • Test için TestNavigationEventCallback sahte yardımcı sınıfı ekleyin. Geri arama yöntemiyle yapılan aramaları kaydeder ve doğrulama için alınan NavigationEvent öğelerini saklar. (4a0246)
  • TestNavigationEvent sahte yardımcı işlevi ekleyerek varsayılan değerlere sahip NavigationEvent örnekleri oluşturun ve gezinme etkinliği işleme için birim testlerini basitleştirin. (3b63f5)
  • Test için TestNavigationEventDispatcherOwner sahte yardımcı sınıfı ekleyin. Testlerde etkileşim doğrulamayı desteklemek için geri dönüş ve etkinleştirilmiş durum değiştirildi etkinlik sayılarını izler. (c8753e)

API Değişiklikleri

  • KMP ortak kodunda kullanılabilir hale getirmek için NavigationEventInputHandler öğesini androidMain konumundan commonMain konumuna taşıyın. Etkinlikleri göndermek için yeni public send* yöntemleri ekleyin. NavigationEventDispatcher üzerindeki gönderme işlevlerini public yerine internal olarak değiştirin. Kullanıcıların artık etkinlik göndermek için NavigationEventInputHandler kullanması gerekir. (Ia7114)
  • NavigationInputHandler öğesini OnBackInvokedInputHandler olarak yeniden adlandırın. (I63405)

Hata Düzeltmeleri

  • Ara liste ayırmalarından kaçınarak ve geri çağırma gönderme performansını artırarak ek yükü azaltmak için NavigationEventDispatcher öğesini yeniden düzenleyin. (I82702, I1a9d9)
  • Derleme sırasında geçerli değer aralıklarını zorunlu kılmak ve API güvenliğini artırmak için NavigationEvent'deki touchX, touchY ve progress alanlarına @FloatRange ek açıklamaları ekleyin. (Iac0ec)

Sürüm 1.0.0-alpha04

2 Temmuz 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha04 iptal edilir. 1.0.0-alpha04 sürümü bu commit'leri içerir.

Hata Düzeltmeleri

  • implementedInJetBrainsFork kullanarak navigationevent-compose ve Compose kurallarına uygun bir commonStubs hedefi ekledim. JetBrains tarafından değişiklik istendi. (f60c79)
  • Doğru sap oluşturmayı sağlamak için Kotlin/Native'e yönelik Compose derleyici eklentisinin uygulanması düzeltildi. Herkese açık API'ler veya davranışlar etkilenmez. (1890c9)

Sürüm 1.0.0-alpha03

18 Haziran 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha03 iptal edilir. 1.0.0-alpha03 sürümü bu commit'leri içerir.

Yeni Özellikler

  • navigationevent kitaplığındaki Jetpack Compose özelliklerini desteklemek için yeni bir navigationevent-compose modülü kullanıma sunuldu. (980d78)
  • NavigationEvent Oluşturma özelliğine yeni bir LocalNavigationEventDispatcherOwner yerel kompozisyon eklendi. Geçerli kompozisyonda kullanılabilir olup olmadığını daha iyi belirlemek için null değer döndürür. NavigationEventHandler artık temel alınan sahip bulunamazsa hata verecek. (62ffda)
  • NavigationEvent Compose, (tahmini geri hareketi) etkinliklerini işlemek için yeni bir NavigationEventHandler Composable ekledi. Sağladığınız askıya alma lambda'sında toplanması gereken NavigationEvent nesnelerin Flow değerini sağlar 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 Değişiklikleri

  • Her NavigationEventCallback artık aynı anda yalnızca bir NavigationEventDispatcher ile kaydedilebilir. Birden fazla dağıtıcıya eklenmesi IllegalStateException hatası verir. Bu davranışın, birden fazla göndericiye izin veren OnBackPressedDispatcher'dan farklı olduğunu unutmayın. (e82c19)
  • Gezinme sırasında mutasyonu önlemek için isPassThrough, val olarak değiştirildi. Bu mutasyon, NavigationEvent'nin gönderimini bozabilir. (I0b287)

Sürüm 1.0.0-alpha02

4 Haziran 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha02 iptal edilir. 1.0.0-alpha02 sürümü bu commit'leri içerir.

API Değişiklikleri

  • NavigationEventDispatcher'nın ikincil oluşturucusunu varsayılan bağımsız değişkenlerle değiştirin. (I716a0)
  • Öncelikli özelliği NavigationEventCallback hesabından kaldırın. Bunun yerine NavigationEventDispatcher.addCallback() uygulamasına öncelik verin. (I13cae)

Hata Düzeltmeleri

  • Kapatılabilir öğelerin dahili listesi eşzamanlı olarak değiştirildiğinden NavigationEventCallback.remove() çağrıldığında oluşabilecek ConcurrentModificationException düzeltildi. (b/420919815)

Sürüm 1.0.0-alpha01

20 Mayıs 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha01 iptal edilir. 1.0.0-alpha01 sürümü bu commit'leri içerir.

Yeni Özellikler

  • androidx.navigationevent kitaplığı, sistemde geri gitme ve tahmini geri gitme işlemlerini yönetmek için KMP öncelikli bir API sağlar. NavigationEventDispatcher, sistem geri etkinliklerini almak için bir veya daha fazla NavigationEventCallback örneğini kaydetmek üzere ortak API'ler olarak işlev görür.
  • Bu katman, androidx.activity içinde daha önce yayınlanan API'lerin altında yer alır ve daha üst düzey bileşenlerde Etkinlik API'lerini kullanmanın veya doğrudan Android çerçevesi OnBackInvokedDispatcher API'lerini kullanmanın daha az fikir sahibi olunarak yapılabilecek bir alternatifi olmayı amaçlar. androidx.activity API'leri, Activity 1.12.0-alpha01 kapsamında Navigation Event API'lerinin üzerine yeniden yazıldı.