navigationevent
Son Güncelleme | Kararlı sürüm | Sürüm Adayı | Beta Sürümü | Alfa sürümü |
---|---|---|---|---|
13 Ağustos 2025 | - | - | - | 1.0.0-alpha06 |
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-alpha06" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-alpha06") }
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.
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-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:
- Bilgi Sağlama: Özel verileri taşımak için
NavigationEventInfo
kullanın. - 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çinsetInfo(currentInfo, previousInfo)
yöntemini kullanıma sunuyor (I1d5e7, b/424470518).NavigationEventHandler
,currentInfo
vepreviousInfo
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ıkdispatcher.state
vedispatcher.getState<T>()
'yi (If7fae, Ia90ca, b/424470518) kullanıma sunuyor. BuStateFlow
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 takdirde0F
değerini döndürenprogress
özelliğiniNavigationEventState
'ye (I7b196) ekleyin:val progress = state.progress
NavigationEventDispatcherOwner
composable ekleyerekNavigationEventDispatcherOwner
örneklerini hiyerarşik olarak oluşturun, bağlayın ve kaldırın.NavigationEventDispatcher
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 durumuDirectNavigationEventInputHandler
üzerinden güncelleyin (varsayılan olarakIdle
ayarlanır). DurumuInProgress
olarak ayarlamak içinhandleOnStarted
veyahandleOnProgressed
'u,Idle
olarak geri döndürmek içinhandleOnCompleted
veyahandleOnCancelled
'i arayın.NavigationEventInfo
uygulamasını güncellemek içinNavigationEventCallback.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çinNavigationEvent
öğesine varsayılan parametreler eklendi. (I5dc49, I232f4) - Belirli mevcut/önceki durumlarla gezinme etkinliklerini test etmek için
TestNavigationEventCallback
eklendi. (Idd22e, b/424470518) NavigationEventInputHandler
, öncekiAbstractNavigationEventInputHandler
yerineDirectNavigationEventInputHandler
'de bir uygulama ile değiştirilmek üzere soyut bir sınıf haline getirildi (Iadde5, Ifed40I3897c, b/432616296, b/435416924)NavigationEventInputHandler
içindekisend*
işlevlerinin ön eklerihandle*
olarak yeniden adlandırıldı. (Iffcaf)OnBackInvokedInputHandler
, yeniabstract
NavigationInputHandler
kapsamını genişletiyor. (Ib45aa)NavigationEventDispatcherOwner
, kök dağıtıcı oluşturmak içinnull
'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
) için sistem geri işleme dokümanları güncellendi. (I7ab94, )
Bağımlılık Güncellemesi
NavigationEvent
artıknavigationevent-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 sunulacaktır. 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 üzerenavigationevent-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ınanNavigationEvent
öğelerini saklar. (4a0246) TestNavigationEvent
sahte yardımcı işlevi ekleyerek varsayılan değerlere sahipNavigationEvent
ö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
öğesiniandroidMain
konumundancommonMain
konumuna taşıyın. Etkinlikleri göndermek için yenipublic send*
yöntemleri ekleyin.NavigationEventDispatcher
üzerindeki gönderme işlevlerinipublic
'deninternal
'ye değiştirin. Kullanıcıların artık etkinlik göndermek içinNavigationEventInputHandler
'ü kullanması gerekir. (Ia7114) NavigationInputHandler
öğesiniOnBackInvokedInputHandler
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
'dekitouchX
,touchY
veprogress
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
,navigationevent-compose
için kullanıldı ve Compose kurallarına uygun bircommonStubs
hedefi eklendi. JetBrains tarafından değişiklik istendi. (f60c79)- Doğru saplama oluşturmayı sağlamak için Kotlin/Native'de 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. Sürüm 1.0.0-alpha03, bu commit'leri içerir.
Yeni Özellikler
navigationevent-compose
kitaplığındaki Jetpack Compose özelliklerini desteklemek için yeni birnavigationevent-compose
modülü kullanıma sunuldu.navigationevent
(980d78)NavigationEvent
Oluşturma özelliğine yeni birLocalNavigationEventDispatcherOwner
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 birNavigationEventHandler
Composable ekledi. Sağladığınız askıya alma lambda'sında toplanması gerekenNavigationEvent
nesnelerinFlow
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 birNavigationEventDispatcher
ile kaydedilebilir. Birden fazla dağıtıcıya eklenmesiIllegalStateException
hatası verir. Bu davranışın, birden fazla göndericiye izin verenOnBackPressedDispatcher
'dan farklı olduğunu unutmayın. (e82c19) - Gezinme sırasında mutasyonu önlemek için
isPassThrough
,val
olarak değiştirildi. Bu durum,NavigationEvent
'ın gönderme işlemini 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 yerineNavigationEventDispatcher.addCallback()
uygulamasına öncelik verin. (I13cae)
Hata Düzeltmeleri
- Kapatılabilir öğelerin dahili listesi eşzamanlı olarak değiştirildiği için
NavigationEventCallback.remove()
çağrıldığında oluşabilecekConcurrentModificationException
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 fazlaNavigationEventCallback
örneğini kaydetmeye yönelik 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çevesiOnBackInvokedDispatcher
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ı.