Unreleased - TBD
0.5.0 - Aug 17, 2024
- KotlinX Coroutines
1.9.0-RC.2
. - AndroidX Lifecycle
2.8.4
. - AndroidX Compose Activity
1.9.1
. - AndroidX Annotation
1.8.2
.
-
StackValidationMode: Introduced a new sealed interface
StackValidationMode
to handle different stack validation modes in the navigation stack. This interface includes three implementations:Strict
: Ensures the stack is always in a valid state and throws an exception if it transitions to an invalid state.Lenient
: Ensures the stack is always in a valid state but takes no action if it transitions to an invalid state.Warning
: Ensures the stack is always in a valid state and logs a warning if it transitions to an invalid state.
-
NavHost: Added a new parameter
stackValidationMode: StackValidationMode
to theNavHost
composable. Default value isStackValidationMode.Lenient
.NavHost( startRoute = LoginScreenRoute, destinations = AllDestinations, navEventNavigator = navigator, destinationChangedCallback = { currentRoute = it }, stackValidationMode = StackValidationMode.Warning.Debug, // <--- Set the stack validation mode )
Lifecycle*Effect
completion is now idempotent (i.e., if theonStopOrDispose
was called because of the Lifecycle being stopped, it won’t be called a second time upon disposal unless the Lifecycle goes back up toSTARTED
again).
0.4.0 - Jul 22, 2024
- Kotlin
2.0.0
🎉. - JetBrains Compose Multiplatform
1.6.11
🎉. - KMP ViewModel
0.8.0
🎉. - KotlinX Coroutines
1.9.0-RC
. - AndroidX Lifecycle
2.8.3
. - AndroidX Compose Activity
1.9.0
. - AndroidX Annotation
1.8.0
. - Benasher44 UUID
0.8.4
.
0.3.0 - Mar 13, 2024
- Fix an issue where a wrong host
LifecycleOwner
can be used (#62). - Rework internal implementation and refactor code (#62).
- Handle
startRoute
changes properly (#62).
0.2.2 - Mar 9, 2024
NavHost
: handle the hostLifecycleOwner
properly to avoid memory leaks (#61).
0.2.1 - Mar 8, 2024
- Fix an issue where
SaveableStateHolder
would not be properly cleared when the destination is removed from the back stack after configuration changes on Android (#59).
0.2.0 - Mar 7, 2024
- New: Add support for Kotlin/Wasm (
wasmJs
target) 🎉. - New: Add
LenientLifecycleRegistry
, aLifecycleRegistry
without the state checking, and hasmoveTo
method to move to a specific state. This is a flexible version ofLifecycleRegistry
. - New: Add
rememberWindowLifecycleOwner()
for Desktop (JVM) platform. - New: Add
SavedStateSupport.ProvideCompositionLocals
andSavedStateSupport.ClearOnDispose
for non-Android platforms.
- Fixed: an issue where
LocalLifecycleOwner
provided the wrongLifecycleOwner
to the content ofNavHost
composable.
- New:
Add Solivagant Wasm Sample.
You can open the web application by running
the
./gradlew :samples:solivagant-wasm-sample:wasmJsBrowserDevelopmentRun
Gradle task.
0.1.1 - Feb 25, 2024
- Add workaround for issue JetBrains/compose-multiplatform #3147 - Kotlin/Native can't use T::class in inline function of @Composable for iOS.
Add Compose Multiplatform Todo solivagant Sample: A KMP template of the Todo App using Compose multiplatform for Android, Desktop, iOS and Web. Share everything including data, domain, presentation, and UI.
0.1.0 - Feb 19, 2024
- New: Add optional
transitionAnimations
parameter toNavHost
@Composable functions. Animations can be overridden withNavHostDefaults.transitionAnimations
or disabled withNavHostTransitionAnimations.noAnimations
. Default animations are the same as default animations in AndroidX'sNavHost
.
-
Breaking: Add a
Modifier
parameter tocontent
ofNavDestination
:@InternalNavigationApi public sealed interface ContentDestination<T : BaseRoute> : NavDestination { // other members... public val content: @Composable (route: T, modifier: Modifier) -> Unit }
This change effects
ScreenDestination
andOverlayDestination
as well. Themodifier
parameter should be passed to thecontent
ofNavDestination
(a.k.a the root@Composable
of the destination), for example:@Immutable @Parcelize data class DetailScreenRoute(val id: String) : NavRoute @JvmField val DetailScreenDestination = ScreenDestination<DetailScreenRoute> { route, modifier -> DetailScreen(modifier = modifier, route = route) } @Composable internal fun DetailScreen(modifier: Modifier, route: DetailScreenRoute) { Scaffold( modifier = modifier, // <--- Pass the modifier to the root @Composable topBar = { /* ... */ }, ) { //* ... */ } }
0.0.1 - Feb 7, 2024
-
Initial release of
solivagant
🔆. Compose Multiplatform Navigation - 🌸 Pragmatic, type safety navigation for Compose Multiplatform. Based on Freeletics Khonshu Navigation.♥️ ViewModel, SavedStateHandle, Lifecycle, Multi-Backstacks, and more... -
Dependencies