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.
-
SlidingTutorial
Android Library for making animated tutorials inside your app -
Bubble Navigation
๐ [Android Library] A light-weight library to easily make beautiful Navigation Bar with ton of ๐จ customization option. -
Compose Destinations
Annotation processing library for type-safe Jetpack Compose navigation with no boilerplate. -
FragNav
An Android library for managing multiple stacks of fragments -
RecyclerTabLayout
An efficient TabLayout library implemented with RecyclerView. -
Duo Navigation Drawer
A flexible, easy to use, unique drawer library for your Android project. -
AnimatedBottomBar
A customizable and easy to use BottomBar navigation view with sleek animations, with support for ViewPager, ViewPager2, NavController, and badges. -
Chip Navigation Bar
An android navigation bar widget -
BubbleTabBar
BubbleTabBar is a bottom navigation bar with customizable bubble-like tabs -
Alligator
Alligator is a modern Android navigation library that will help to organize your navigation code in clean and testable way. -
Fragula 2
๐ง Fragula is a swipe-to-dismiss extension for navigation component library for Android -
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. -
CarMarker-Animation
Marker Animation android googlemap -
Dual-color-Polyline-Animation
This library will help to show the polyline in dual color similar as Uber. -
Keyboard Dismisser
Dismiss your keyboard by tapping anywhere outside it. -
TypedNavigation
A lightweight library to help you navigate in compose with well typed functions. -
Facilis
A sleek, out of the box, easy to understand and use, swipe gesture based Navigational Library for android. -
fragstack
Memory efficient android library for managing individual fragment backstack. -
what3words Autosuggest EditText
An Android library to use what3words autosuggest -
EasySideNavigation
Create side navigation in easy way -
AndroidBriefActions
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.
Appwrite - The Open Source Firebase alternative introduces iOS support
* 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.