navigationevent
Najnowsza aktualizacja | Wersja stabilna | Wersja kandydująca do publikacji | Wersja Beta | Wersja alfa |
---|---|---|---|---|
30 lipca 2025 r. | - | - | - | 1.0.0-alpha05 |
Deklarowanie zależności
Aby dodać zależność od navigationevent, musisz dodać repozytorium Google Maven do projektu. Więcej informacji znajdziesz w repozytorium Maven Google.
Dodaj zależności dotyczące potrzebnych artefaktów w pliku build.gradle
aplikacji lub modułu:
Groovy
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-alpha05" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-alpha05") }
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nową kartę, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Brak informacji o wersji tego artefaktu.
Wersja 1.0
Wersja 1.0.0-alpha05
30 lipca 2025 r.
Zostanie wycofaneandroidx.navigationevent:navigationevent-*:1.0.0-alpha05
Wersja 1.0.0-alpha05 zawiera te commity.
Obsługa hierarchii rodzic–dziecko:
NavigationEventDispatcher
może teraz mieć dyspozytorów nadrzędnych i podrzędnych, tworząc hierarchiczną strukturę drzewa. Umożliwia to propagowanie zdarzeń nawigacyjnych i elastyczniejsze zarządzanie nimi w przypadku złożonych komponentów interfejsu Compose przez odzwierciedlanie hierarchii strukturalnej interfejsu za pomocą połączonych dyspozytorów. (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)
Hierarchiczna właściwość isEnabled
umożliwia sterowanie dyspozytorem od góry do dołu. Gdy w przypadku dyspozytora ustawisz isEnabled
na false
, automatycznie wyłączysz wszystkich jego dyspozytorów podrzędnych. Ta funkcja umożliwia efektywne wyłączanie całych gałęzi systemu zdarzeń nawigacyjnych. (I9e985)
// Disabling the child dispatcher disables all its callbacks and any of its children recursively.
childDispatcher.isEnabled = false
Dodatkowo właściwość isEnabled
w NavigationEventCallback
uwzględnia teraz stan włączenia powiązanego z nią modułu wysyłającego. Oznacza to, że wywołanie zwrotne jest uznawane za włączone tylko wtedy, gdy włączone jest samo wywołanie zwrotne i jego dyspozytor (wraz z jego elementami nadrzędnymi), co zapewnia spójną kontrolę hierarchiczną nad aktywacją wywołania zwrotnego. (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()
Wprowadziliśmy nową dispose()
metodę prawidłowego czyszczenia dyspozytorów i ich elementów podrzędnych. Wywołanie dispose()
zatrzymuje odbiorców, aby zapobiec wyciekom pamięci, rekurencyjnie usuwa wszystkie podrzędne elementy wysyłające, usuwa wszystkie wywołania zwrotne zarejestrowane w elemencie wysyłającym i odłącza go od elementu nadrzędnego. Dzięki temu zasoby są prawidłowo zwalniane, gdy dyspozytorzy nie są już potrzebni. (I9e985)
// Dispose the child dispatcher to clean up resources.
childDispatcher.dispose()
Jeśli w przypadku zamkniętego dyspozytora zostanie wywołana jakakolwiek metoda publiczna, natychmiast zostanie zgłoszony wyjątek IllegalStateException
. Zapobiega to cichym błędom i pomaga deweloperom wykrywać nieprawidłowe użycie podczas opracowywania aplikacji. (Ic2dc3)
val callback2 = TestNavigationEventCallback()
// Attempting to use a disposed dispatcher will throw an exception.
assertThrows<IllegalStateException> {
childDispatcher.addCallback(callback2)
}
Uwaga: wprowadzimy nowy NavigationEventDispatcherOwner
komponent, który automatycznie zarządza dyspozytorem podrzędnym w interfejsie Compose w aosp/3692572. Ta zmiana nie została jednak uwzględniona w bieżącej wersji i jest planowana w następnej.
Biblioteka testów nawigacji
- Dodaj moduł
navigationevent-testing
, aby udostępnić narzędzia do testowania bibliotekinavigationevent
. (0e50b6) - Dodaj
TestNavigationEventCallback
fałszywą klasę narzędziową do testowania. Rejestruje wywołania metody wywołania zwrotnego i przechowuje otrzymaneNavigationEvent
, aby umożliwić weryfikację. (4a0246) - Dodano
TestNavigationEvent
fałszywą funkcję narzędziową do tworzenia instancjiNavigationEvent
z wartościami domyślnymi, co upraszcza testy jednostkowe przetwarzania zdarzeń nawigacji. (3b63f5) - Dodaj
TestNavigationEventDispatcherOwner
fałszywą klasę narzędziową do testowania. Śledzi liczbę zdarzeń związanych z włączeniem i wyłączeniem funkcji rezerwowej, aby obsługiwać weryfikację interakcji w testach. (c8753e)
Zmiany w interfejsie API
- Przenieś
NavigationEventInputHandler
zandroidMain
docommonMain
, aby udostępnić go we wspólnym kodzie KMP. Dodano nowe metodypublic send*
do wysyłania zdarzeń. Zmień funkcje wysyłania wNavigationEventDispatcher
zpublic
nainternal
. Użytkownicy muszą teraz używaćNavigationEventInputHandler
do wysyłania zdarzeń. (Ia7114) - Zmień nazwę
NavigationInputHandler
naOnBackInvokedInputHandler
. (I63405)
Poprawki błędów
- Przeprowadź refaktoryzację
NavigationEventDispatcher
, aby zmniejszyć obciążenie przez unikanie przydzielania list pośrednich i zwiększenie wydajności wysyłania wywołań zwrotnych. (I82702, I1a9d9) - Dodaj adnotacje
@FloatRange
do póltouchX
,touchY
iprogress
wNavigationEvent
, aby wymusić prawidłowe zakresy wartości w czasie kompilacji i zwiększyć bezpieczeństwo interfejsu API. (Iac0ec)
Wersja 1.0.0-alpha04
2 lipca 2025 r.
Zostanie wycofaneandroidx.navigationevent:navigationevent-*:1.0.0-alpha04
Wersja 1.0.0-alpha04 zawiera te zmiany.
Poprawki błędów
- Użyto
implementedInJetBrainsFork
donavigationevent-compose
i dodano element docelowycommonStubs
, aby zachować zgodność z konwencjami Compose. Zmiana zaproponowana przez JetBrains. (f60c79) - Naprawiono stosowanie wtyczki kompilatora Compose dla Kotlin/Native, aby zapewnić prawidłowe generowanie stubów. Nie ma to wpływu na publiczne interfejsy API ani ich działanie. (1890c9)
Wersja 1.0.0-alpha03
18 czerwca 2025 r.
Zostanie wycofaneandroidx.navigationevent:navigationevent-*:1.0.0-alpha03
Wersja 1.0.0-alpha03 zawiera te commity.
Nowe funkcje
- Wprowadziliśmy nowy moduł
navigationevent-compose
, który obsługuje funkcje Jetpack Compose w bibliotecenavigationevent
. (980d78) NavigationEvent
Kompozytor dodał nowąLocalNavigationEventDispatcherOwner
kompozycję lokalną. Zwraca wartość dopuszczającą wartość null, aby lepiej określić, czy jest ona dostępna w bieżącej kompozycji.NavigationEventHandler
będzie teraz zgłaszać błąd, jeśli nie znajdzie właściciela. (62ffda)NavigationEvent
Compose dodał nowyNavigationEventHandler
komponent kompozycyjny do obsługi zdarzeń (gestu przewidywania powrotu). ZawieraFlow
obiektówNavigationEvent
, które muszą zostać zebrane w zawieszającej lambdzie podanej przez Ciebie 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
}
}
Zmiany w interfejsie API
- Każdy element
NavigationEventCallback
można teraz zarejestrować tylko w jednym elemencieNavigationEventDispatcher
naraz. Dodanie go do wielu dyspozytorów powoduje błądIllegalStateException
. Pamiętaj, że to zachowanie różni się od zachowaniaOnBackPressedDispatcher
, które umożliwia korzystanie z wielu dyspozytorów. (e82c19) - Zmieniliśmy
isPassThrough
naval
, aby zapobiec mutacji podczas nawigacji, która mogłaby zakłócić wysyłanieNavigationEvent
. (I0b287)
Wersja 1.0.0-alpha02
4 czerwca 2025 r.
Zostanie wycofaneandroidx.navigationevent:navigationevent-*:1.0.0-alpha02
Wersja 1.0.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Zastąp pomocniczy konstruktor
NavigationEventDispatcher
argumentami domyślnymi. (I716a0) - Usuń priorytetową usługę z konta
NavigationEventCallback
. Zamiast tego przekaż priorytet doNavigationEventDispatcher.addCallback()
. (I13cae)
Poprawki błędów
- Naprawiliśmy
ConcurrentModificationException
, który mógł wystąpić, gdy wywoływanoNavigationEventCallback.remove()
z powodu jednoczesnej modyfikacji wewnętrznej listy elementów zamykanych. (b/420919815)
Wersja 1.0.0-alpha01
20 maja 2025 r.
Zostanie wycofaneandroidx.navigationevent:navigationevent-*:1.0.0-alpha01
Wersja 1.0.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Biblioteka
androidx.navigationevent
udostępnia interfejs API KMP do obsługi systemowego przycisku Wstecz oraz przewidywanego powrotu. InterfejsNavigationEventDispatcher
służy jako wspólny interfejs API do rejestrowania co najmniej 1 instancjiNavigationEventCallback
w celu odbierania zdarzeń powrotu systemu. - Ta warstwa znajduje się poniżej wcześniej udostępnionych interfejsów API w
androidx.activity
i ma być mniej subiektywnym zamiennikiem interfejsów API aktywności w komponentach wyższego poziomu lub bezpośredniego korzystania z interfejsów APIOnBackInvokedDispatcher
platformy Android. Interfejsy APIandroidx.activity
zostały przepisane na podstawie interfejsów Navigation Event API w ramach Activity 1.12.0-alpha01.