navigationevent

  
Biblioteka Navigation Event udostępnia interfejs API oparty na KMP do obsługi systemowego przycisku Wstecz oraz przewidywanego powrotu.
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.

Tworzenie nowego problemu

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ść isEnabledNavigationEventCallback 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 biblioteki navigationevent. (0e50b6)
  • Dodaj TestNavigationEventCallback fałszywą klasę narzędziową do testowania. Rejestruje wywołania metody wywołania zwrotnego i przechowuje otrzymane NavigationEvent, aby umożliwić weryfikację. (4a0246)
  • Dodano TestNavigationEvent fałszywą funkcję narzędziową do tworzenia instancji NavigationEvent 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ś NavigationEventInputHandlerandroidMain do commonMain, aby udostępnić go we wspólnym kodzie KMP. Dodano nowe metody public send* do wysyłania zdarzeń. Zmień funkcje wysyłania w NavigationEventDispatcherpublic na internal. Użytkownicy muszą teraz używać NavigationEventInputHandler do wysyłania zdarzeń. (Ia7114)
  • Zmień nazwę NavigationInputHandler na OnBackInvokedInputHandler. (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ól touchX, touchY i progress w NavigationEvent, 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 do navigationevent-compose i dodano element docelowy commonStubs, 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 bibliotece navigationevent. (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ł nowy NavigationEventHandler komponent kompozycyjny do obsługi zdarzeń (gestu przewidywania powrotu). Zawiera Flow obiektów NavigationEvent, 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 elemencie NavigationEventDispatcher naraz. Dodanie go do wielu dyspozytorów powoduje błąd IllegalStateException. Pamiętaj, że to zachowanie różni się od zachowania OnBackPressedDispatcher, które umożliwia korzystanie z wielu dyspozytorów. (e82c19)
  • Zmieniliśmy isPassThrough na val, aby zapobiec mutacji podczas nawigacji, która mogłaby zakłócić wysyłanie NavigationEvent. (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 do NavigationEventDispatcher.addCallback(). (I13cae)

Poprawki błędów

  • Naprawiliśmy ConcurrentModificationException, który mógł wystąpić, gdy wywoływano NavigationEventCallback.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. Interfejs NavigationEventDispatcher służy jako wspólny interfejs API do rejestrowania co najmniej 1 instancji NavigationEventCallback 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 API OnBackInvokedDispatcher platformy Android. Interfejsy API androidx.activity zostały przepisane na podstawie interfejsów Navigation Event API w ramach Activity 1.12.0-alpha01.