Description
A small and simple, yet fully fledged and customizable navigation library for Jetpack Compose
Compose Navigation Reimagined alternatives and similar packages
Based on the "Navigation" category.
Alternatively, view compose-navigation-reimagined alternatives based on common mentions on social networks and blogs.
-
Compose Destinations
Annotation processing library for type-safe Jetpack Compose navigation with no boilerplate. -
Bubble Navigation
๐ [Android Library] A light-weight library to easily make beautiful Navigation Bar with ton of ๐จ customization option. -
AnimatedBottomBar
A customizable and easy to use BottomBar navigation view with sleek animations, with support for ViewPager, ViewPager2, NavController, and badges. -
Alligator
Alligator is Android navigation library that will help to organize your navigation code in clean and testable way. -
PagerSlidingTabStrip
An interactive indicator to navigate between the different pages of a ViewPager -
Okuki
Okuki is a simple, hierarchical navigation bus and back stack for Android, with optional Rx bindings, and Toothpick DI integration. -
Dual-color-Polyline-Animation
This library will help to show the polyline in dual color similar as Uber. -
Facilis
A sleek, out of the box, easy to understand and use, swipe gesture based Navigational Library for android. -
AndroidBriefActions
DISCONTINUED. Android library for sending and observing non persistent actions such as showing a message; nice readable way to call navigation actions from ViewModel or Activity/Fragment.
WorkOS - The modern identity platform for B2B SaaS
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Compose Navigation Reimagined or a related project?
README
A small and simple, yet fully fledged and customizable navigation library for Jetpack Compose:
- Full type-safety
- State restoration
- Nested navigation with independent backstacks
- Easy integration with BottomNavigation and TabRow
- Own lifecycle, saved state and view models for every backstack entry
- Animated transitions
- Navigation logic may be easily moved to the ViewModel layer
- No builders, no obligatory superclasses for your composables
Quick start
Add a single dependency to your project:
implementation("dev.olshevski.navigation:reimagined:1.1.1")
Define a set of screens. It is convenient to use a sealed class for this:
sealed class Screen : Parcelable {
@Parcelize
object First : Screen()
@Parcelize
data class Second(val id: Int) : Screen()
@Parcelize
data class Third(val text: String) : Screen()
}
Create a composable with NavController
, NavBackHandler
and NavHost
:
@Composable
fun NavHostScreen() {
val navController = rememberNavController<Screen>(
startDestination = Screen.First
)
NavBackHandler(navController)
NavHost(navController) { screen ->
when (screen) {
Screen.First -> Column {
Text("First screen")
Button(onClick = {
navController.navigate(Screen.Second(id = 42))
}) {
Text("To Second screen")
}
}
is Screen.Second -> Column {
Text("Second screen: ${screen.id}")
Button(onClick = {
navController.navigate(Screen.Third(text = "Hello"))
}) {
Text("To Third screen")
}
}
is Screen.Third -> {
Text("Third screen: ${screen.text}")
}
}
}
}
As you can see, NavController
is used for switching between screens, NavBackHandler
handles back presses and NavHost
provides a composable corresponding to the last destination in the backstack. As simple as that.
Documentation
Full documentation is available here.
Sample
Explore the sample. It demonstrates:
- nested navigation
- BottomNavigation
- NavHost/AnimatedNavHost usage
- passing values and returning results
- dialog navigation
- entry-scoped ViewModels
- usage of NavController within the ViewModel layer
- deeplinks
About
I've been thinking about Android app architecture and navigation in particular for the longest time. After being introduced to Compose I could finally create the navigation structure that satisfies all my needs perfectly.
I hope it can help you as well.
If you like this library and find it useful, please star the project and share it with your fellow developers. A little bit of promotion never hurts.