NavController


open class NavController

Known direct subclasses
NavHostController

Subclass of NavController that offers additional APIs for use by a NavHost to connect the NavController to external dependencies.

Known indirect subclasses
TestNavHostController

Subclass of NavHostController that offers additional APIs for testing Navigation.


NavController manages app navigation within a NavHost.

Apps will generally obtain a controller directly from a host, or by using one of the utility methods on the Navigation class rather than create a controller directly.

Navigation flows and destinations are determined by the navigation graph owned by the controller. These graphs are typically inflated from an Android resource, but, like views, they can also be constructed or combined programmatically or for the case of dynamic navigation structure. (For example, if the navigation structure of the application is determined by live data obtained' from a remote server.)

Summary

Nested types

OnDestinationChangedListener receives a callback when the currentDestination or its arguments change.

Constants

const String

The Intent that triggered a deep link to the current destination.

Public companion functions

Unit

By default, handleDeepLink will automatically add calls to NavOptions.Builder.setPopUpTo with a saveState of true when the deep link takes you to another graph (e.g., a different navigation graph than the one your start destination is in).

Public constructors

Public functions

open Unit

Adds an OnDestinationChangedListener to this controller to receive a callback whenever the currentDestination or its arguments change.

inline Boolean

Clears any saved state associated with KClass T that was previously saved via popBackStack when using a saveState value of true.

Boolean

Clears any saved state associated with destinationId that was previously saved via popBackStack when using a saveState value of true.

Boolean
@MainThread
<T : Any> clearBackStack(route: KClass<T>)

Clears any saved state associated with KClass route that was previously saved via popBackStack when using a saveState value of true.

Boolean
@MainThread
<T : Any> clearBackStack(route: T)

Clears any saved state associated with KClass T that was previously saved via popBackStack when using a saveState value of true.

Boolean

Clears any saved state associated with route that was previously saved via popBackStack when using a saveState value of true.

open NavDeepLinkBuilder

Create a deep link to a destination within this NavController.

inline NavBackStackEntry

Gets the topmost NavBackStackEntry for a route from KClass.

open NavBackStackEntry
getBackStackEntry(destinationId: @IdRes Int)

Gets the topmost NavBackStackEntry for a destination id.

NavBackStackEntry
<T : Any> getBackStackEntry(route: KClass<T>)

Gets the topmost NavBackStackEntry for a route from KClass.

NavBackStackEntry
<T : Any> getBackStackEntry(route: T)

Gets the topmost NavBackStackEntry for a route from an Object.

NavBackStackEntry

Gets the topmost NavBackStackEntry for a route.

open ViewModelStoreOwner

Gets the ViewModelStoreOwner for a NavGraph.

open Boolean

Checks the given Intent for a Navigation deep link and navigates to the deep link if present.

Boolean

Checks the given NavDeepLinkRequest for a Navigation deep link and navigates to the destination if present.

open Unit
@MainThread
navigate(deepLink: Uri)

Navigate to a destination via the given deep link Uri.

open Unit

Navigate via the given NavDirections

open Unit

Navigate to a destination via the given NavDeepLinkRequest.

open Unit

Navigate to a destination from the current navigation graph.

open Unit
@MainThread
navigate(deepLink: Uri, navOptions: NavOptions?)

Navigate to a destination via the given deep link Uri.

open Unit
@MainThread
navigate(directions: NavDirections, navOptions: NavOptions?)

Navigate via the given NavDirections

open Unit
@MainThread
navigate(directions: NavDirections, navigatorExtras: Navigator.Extras)

Navigate via the given NavDirections

open Unit

Navigate to a destination via the given NavDeepLinkRequest.

open Unit
@MainThread
navigate(resId: @IdRes Int, args: Bundle?)

Navigate to a destination from the current navigation graph.

Unit
@MainThread
<T : Any> navigate(route: T, builder: NavOptionsBuilder.() -> Unit)

Navigate to a route from an Object in the current NavGraph.

Unit
@MainThread
navigate(route: String, builder: NavOptionsBuilder.() -> Unit)

Navigate to a route in the current NavGraph.

open Unit
@MainThread
navigate(
    deepLink: Uri,
    navOptions: NavOptions?,
    navigatorExtras: Navigator.Extras?
)

Navigate to a destination via the given deep link Uri.

open Unit
@MainThread
navigate(
    request: NavDeepLinkRequest,
    navOptions: NavOptions?,
    navigatorExtras: Navigator.Extras?
)

Navigate to a destination via the given NavDeepLinkRequest.

open Unit
@MainThread
navigate(resId: @IdRes Int, args: Bundle?, navOptions: NavOptions?)

Navigate to a destination from the current navigation graph.

Unit
@MainThread
<T : Any> navigate(
    route: T,
    navOptions: NavOptions?,
    navigatorExtras: Navigator.Extras?
)

Navigate to a route from an Object in the current NavGraph.

Unit
@MainThread
navigate(
    route: String,
    navOptions: NavOptions?,
    navigatorExtras: Navigator.Extras?
)

Navigate to a route in the current NavGraph.

open Unit
@MainThread
navigate(
    resId: @IdRes Int,
    args: Bundle?,
    navOptions: NavOptions?,
    navigatorExtras: Navigator.Extras?
)

Navigate to a destination from the current navigation graph.

open Boolean

Attempts to navigate up in the navigation hierarchy.

open Boolean

Attempts to pop the controller's back stack.

open Boolean
@MainThread
popBackStack(destinationId: @IdRes Int, inclusive: Boolean)

Attempts to pop the controller's back stack back to a specific destination.

inline Boolean
@MainThread
<T : Any> popBackStack(inclusive: Boolean, saveState: Boolean)

Attempts to pop the controller's back stack back to a specific destination.

open Boolean
@MainThread
popBackStack(
    destinationId: @IdRes Int,
    inclusive: Boolean,
    saveState: Boolean
)

Attempts to pop the controller's back stack back to a specific destination.

Boolean
@MainThread
<T : Any> popBackStack(
    route: KClass<T>,
    inclusive: Boolean,
    saveState: Boolean
)

Attempts to pop the controller's back stack back to a specific destination.

Boolean
@MainThread
<T : Any> popBackStack(route: T, inclusive: Boolean, saveState: Boolean)

Attempts to pop the controller's back stack back to a specific destination.

Boolean
@MainThread
popBackStack(route: String, inclusive: Boolean, saveState: Boolean)

Attempts to pop the controller's back stack back to a specific destination.

open Unit

Removes an OnDestinationChangedListener from this controller.

open Unit

Restores all navigation controller state from a bundle.

open Bundle?

Saves all navigation controller state to a Bundle.

open Unit

Sets the navigation graph to the specified resource.

open Unit
@MainThread
@CallSuper
setGraph(graph: NavGraph, startDestinationArgs: Bundle?)

Sets the navigation graph to the specified graph.

open Unit
@MainThread
@CallSuper
setGraph(graphResId: @NavigationRes Int, startDestinationArgs: Bundle?)

Sets the navigation graph to the specified resource.

Public properties

open NavBackStackEntry?

The topmost NavBackStackEntry.

Flow<NavBackStackEntry>

A Flow that will emit the currently active NavBackStackEntry whenever it changes.

open NavDestination?

The current destination.

open NavGraph

The topmost navigation graph associated with this NavController.

open NavInflater

The inflater for this controller.

open NavigatorProvider

The NavController's NavigatorProvider.

open NavBackStackEntry?

The previous visible NavBackStackEntry.

StateFlow<List<NavBackStackEntry>>

A StateFlow that will emit the currently visible NavBackStackEntries whenever they change.

Extension functions

inline NavGraph
NavController.createGraph(
    id: @IdRes Int,
    startDestination: @IdRes Int,
    builder: NavGraphBuilder.() -> Unit
)

This function is deprecated. Use routes to create your NavGraph instead

inline NavGraph
NavController.createGraph(
    id: @IdRes Int,
    startDestination: @IdRes Int,
    builder: DynamicNavGraphBuilder.() -> Unit
)

This function is deprecated. Use routes to create your dynamic NavGraph instead

inline NavGraph
NavController.createGraph(
    startDestination: String,
    route: String?,
    builder: NavGraphBuilder.() -> Unit
)

Construct a new NavGraph

inline NavGraph
NavController.createGraph(
    startDestination: String,
    route: String?,
    builder: DynamicNavGraphBuilder.() -> Unit
)

Construct a new androidx.navigation.NavGraph that supports dynamic navigation destinations

inline NavGraph
NavController.createGraph(
    startDestination: Any,
    route: KClass<*>?,
    typeMap: Map<KTypeNavType<*>>,
    builder: NavGraphBuilder.() -> Unit
)

Construct a new NavGraph

inline NavGraph
NavController.createGraph(
    startDestination: Any,
    route: KClass<*>?,
    typeMap: Map<KTypeNavType<*>>,
    builder: DynamicNavGraphBuilder.() -> Unit
)

Construct a new androidx.navigation.NavGraph that supports dynamic navigation destinations

inline NavGraph
NavController.createGraph(
    startDestination: KClass<*>,
    route: KClass<*>?,
    typeMap: Map<KTypeNavType<*>>,
    builder: NavGraphBuilder.() -> Unit
)

Construct a new NavGraph

inline NavGraph
NavController.createGraph(
    startDestination: KClass<*>,
    route: KClass<*>?,
    typeMap: Map<KTypeNavType<*>>,
    builder: DynamicNavGraphBuilder.() -> Unit
)

Construct a new androidx.navigation.NavGraph that supports dynamic navigation destinations

Boolean

Handles the Up button by delegating its behavior to the given NavController.

Boolean

Handles the Up button by delegating its behavior to the given NavController.

State<NavBackStackEntry?>

Gets the current navigation back stack entry as a MutableState.

State<NavBackStackEntry?>

Gets the current navigation back stack entry as a State.

Constants

const val KEY_DEEP_LINK_INTENTString

The Intent that triggered a deep link to the current destination.

Public companion functions

enableDeepLinkSaveState

Added in 2.4.0
@NavDeepLinkSaveStateControl
fun enableDeepLinkSaveState(saveState: Boolean): Unit

By default, handleDeepLink will automatically add calls to NavOptions.Builder.setPopUpTo with a saveState of true when the deep link takes you to another graph (e.g., a different navigation graph than the one your start destination is in).

You can disable this behavior by passing false for saveState.

Public constructors

Added in 1.0.0
NavController(context: Context)

Public functions

addOnDestinationChangedListener

Added in 1.0.0
open fun addOnDestinationChangedListener(
    listener: NavController.OnDestinationChangedListener
): Unit

Adds an OnDestinationChangedListener to this controller to receive a callback whenever the currentDestination or its arguments change.

The current destination, if any, will be immediately sent to your listener.

Parameters
listener: NavController.OnDestinationChangedListener

the listener to receive events

clearBackStack

@MainThread
inline fun <T : Any> clearBackStack(): Boolean

Clears any saved state associated with KClass T that was previously saved via popBackStack when using a saveState value of true.

Parameters
<T : Any>

The route from the KClass of the destination previously used with popBackStack with a saveStatevalue of true. The target NavDestination must have been created with route from KClass.

Returns
Boolean

true if the saved state of the stack associated with T was cleared.

clearBackStack

Added in 2.4.0
@MainThread
fun clearBackStack(destinationId: @IdRes Int): Boolean

Clears any saved state associated with destinationId that was previously saved via popBackStack when using a saveState value of true.

Parameters
destinationId: @IdRes Int

The ID of the destination previously used with popBackStack with a saveStatevalue of true

Returns
Boolean

true if the saved state of the stack associated with destinationId was cleared.

clearBackStack

Added in 2.9.0-alpha04
@MainThread
fun <T : Any> clearBackStack(route: KClass<T>): Boolean

Clears any saved state associated with KClass route that was previously saved via popBackStack when using a saveState value of true.

Parameters
route: KClass<T>

The route from the KClass of the destination previously used with popBackStack with a saveStatevalue of true. The target NavDestination must have been created with route from KClass.

Returns
Boolean

true if the saved state of the stack associated with route was cleared.

clearBackStack

Added in 2.8.0
@MainThread
fun <T : Any> clearBackStack(route: T): Boolean

Clears any saved state associated with KClass T that was previously saved via popBackStack when using a saveState value of true.

Parameters
route: T

The route from an Object of the destination previously used with popBackStack with a saveStatevalue of true. The target NavDestination must have been created with route from KClass.

Returns
Boolean

true if the saved state of the stack associated with T was cleared.

clearBackStack

Added in 2.4.0
@MainThread
fun clearBackStack(route: String): Boolean

Clears any saved state associated with route that was previously saved via popBackStack when using a saveState value of true.

Parameters
route: String

The route of the destination previously used with popBackStack with a saveState value of true. May contain filled in arguments as long as it is exact match with route used with popBackStack.

Returns
Boolean

true if the saved state of the stack associated with route was cleared.

createDeepLink

Added in 1.0.0
open fun createDeepLink(): NavDeepLinkBuilder

Create a deep link to a destination within this NavController.

Returns
NavDeepLinkBuilder

a NavDeepLinkBuilder suitable for constructing a deep link

getBackStackEntry

inline fun <T : Any> getBackStackEntry(): NavBackStackEntry

Gets the topmost NavBackStackEntry for a route from KClass.

This is always safe to use with the current destination or its parent or grandparent navigation graphs as these destinations are guaranteed to be on the back stack.

Parameters
<T : Any>

route from the KClass of a destination that exists on the back stack. The target NavBackStackEntry's NavDestination must have been created with route from KClass.

Throws
kotlin.IllegalArgumentException

if the destination is not on the back stack

getBackStackEntry

Added in 2.2.0
open fun getBackStackEntry(destinationId: @IdRes Int): NavBackStackEntry

Gets the topmost NavBackStackEntry for a destination id.

This is always safe to use with the current destination or its parent or grandparent navigation graphs as these destinations are guaranteed to be on the back stack.

Parameters
destinationId: @IdRes Int

ID of a destination that exists on the back stack

Throws
kotlin.IllegalArgumentException

if the destination is not on the back stack

getBackStackEntry

Added in 2.9.0-alpha04
fun <T : Any> getBackStackEntry(route: KClass<T>): NavBackStackEntry

Gets the topmost NavBackStackEntry for a route from KClass.

This is always safe to use with the current destination or its parent or grandparent navigation graphs as these destinations are guaranteed to be on the back stack.

Parameters
route: KClass<T>

route from the KClass of destination T that exists on the back stack. The target NavBackStackEntry's NavDestination must have been created with route from KClass.

Throws
kotlin.IllegalArgumentException

if the destination is not on the back stack

getBackStackEntry

Added in 2.8.0
fun <T : Any> getBackStackEntry(route: T): NavBackStackEntry

Gets the topmost NavBackStackEntry for a route from an Object.

This is always safe to use with the current destination or its parent or grandparent navigation graphs as these destinations are guaranteed to be on the back stack.

Parameters
route: T

route from an Object of a destination that exists on the back stack. The target NavBackStackEntry's NavDestination must have been created with route from KClass.

Throws
kotlin.IllegalArgumentException

if the destination is not on the back stack

getBackStackEntry

Added in 2.4.0
fun getBackStackEntry(route: String): NavBackStackEntry

Gets the topmost NavBackStackEntry for a route.

This is always safe to use with the current destination or its parent or grandparent navigation graphs as these destinations are guaranteed to be on the back stack.

Parameters
route: String

route of a destination that exists on the back stack. May contain filled in arguments as long as it is exact match with route used to navigate.

Throws
kotlin.IllegalArgumentException

if the destination is not on the back stack

getViewModelStoreOwner

Added in 2.1.0
open fun getViewModelStoreOwner(navGraphId: @IdRes Int): ViewModelStoreOwner

Gets the ViewModelStoreOwner for a NavGraph. This can be passed to androidx.lifecycle.ViewModelProvider to retrieve a ViewModel that is scoped to the navigation graph - it will be cleared when the navigation graph is popped off the back stack.

Parameters
navGraphId: @IdRes Int

ID of a NavGraph that exists on the back stack

Throws
kotlin.IllegalStateException

if called before the NavHost has called NavHostController.setViewModelStore.

kotlin.IllegalArgumentException

if the NavGraph is not on the back stack

handleDeepLink

Added in 1.0.0
@MainThread
open fun handleDeepLink(intent: Intent?): Boolean

Checks the given Intent for a Navigation deep link and navigates to the deep link if present. This is called automatically for you the first time you set the graph if you've passed in an Activity as the context when constructing this NavController, but should be manually called if your Activity receives new Intents in Activity.onNewIntent.

The types of Intents that are supported include:

Intents created by NavDeepLinkBuilder or createDeepLink. This assumes that the current graph shares the same hierarchy to get to the deep linked destination as when the deep link was constructed. Intents that include a data Uri. This Uri will be checked against the Uri patterns in the NavDeepLinks added via NavDestination.addDeepLink.

The navigation graph should be set before calling this method.

Parameters
intent: Intent?

The Intent that may contain a valid deep link

Returns
Boolean

True if the navigation controller found a valid deep link and navigated to it.

Throws
kotlin.IllegalStateException

if deep link cannot be accessed from the current destination

See also
addDeepLink

handleDeepLink

Added in 2.9.0-alpha04
@MainThread
fun handleDeepLink(request: NavDeepLinkRequest): Boolean

Checks the given NavDeepLinkRequest for a Navigation deep link and navigates to the destination if present.

The navigation graph should be set before calling this method.

Parameters
request: NavDeepLinkRequest

The request that contains a valid deep link, an action or a mimeType.

Returns
Boolean

True if the navigation controller found a valid deep link and navigated to it.

Throws
kotlin.IllegalStateException

if deep link cannot be accessed from the current destination

See also
addDeepLink
Added in 2.1.0
@MainThread
open fun navigate(deepLink: Uri): Unit

Navigate to a destination via the given deep link Uri. NavDestination.hasDeepLink should be called on the navigation graph prior to calling this method to check if the deep link is valid. If an invalid deep link is given, an IllegalArgumentException will be thrown.

Parameters
deepLink: Uri

deepLink to the destination reachable from the current NavGraph

See also
navigate
Added in 1.0.0
@MainThread
open fun navigate(directions: NavDirections): Unit

Navigate via the given NavDirections

Parameters
directions: NavDirections

directions that describe this navigation operation

Added in 2.3.0
@MainThread
open fun navigate(request: NavDeepLinkRequest): Unit

Navigate to a destination via the given NavDeepLinkRequest. NavDestination.hasDeepLink should be called on the navigation graph prior to calling this method to check if the deep link is valid. If an invalid deep link is given, an IllegalArgumentException will be thrown.

Parameters
request: NavDeepLinkRequest

deepLinkRequest to the destination reachable from the current NavGraph

Throws
kotlin.IllegalArgumentException

if the given deep link request is invalid

Added in 1.0.0
@MainThread
open fun navigate(resId: @IdRes Int): Unit

Navigate to a destination from the current navigation graph. This supports both navigating via an action and directly navigating to a destination.

Parameters
resId: @IdRes Int

an action id or a destination id to navigate to

Throws
kotlin.IllegalStateException

if there is no current navigation node

kotlin.IllegalArgumentException

if the desired destination cannot be found from the current destination

Added in 2.1.0
@MainThread
open fun navigate(deepLink: Uri, navOptions: NavOptions?): Unit

Navigate to a destination via the given deep link Uri. NavDestination.hasDeepLink should be called on the navigation graph prior to calling this method to check if the deep link is valid. If an invalid deep link is given, an IllegalArgumentException will be thrown.

Parameters
deepLink: Uri

deepLink to the destination reachable from the current NavGraph

navOptions: NavOptions?

special options for this navigation operation

See also
navigate
Added in 1.0.0
@MainThread
open fun navigate(directions: NavDirections, navOptions: NavOptions?): Unit

Navigate via the given NavDirections

Parameters
directions: NavDirections

directions that describe this navigation operation

navOptions: NavOptions?

special options for this navigation operation

Added in 1.0.0
@MainThread
open fun navigate(directions: NavDirections, navigatorExtras: Navigator.Extras): Unit

Navigate via the given NavDirections

Parameters
directions: NavDirections

directions that describe this navigation operation

navigatorExtras: Navigator.Extras

extras to pass to the Navigator

Added in 2.3.0
@MainThread
open fun navigate(request: NavDeepLinkRequest, navOptions: NavOptions?): Unit

Navigate to a destination via the given NavDeepLinkRequest. NavDestination.hasDeepLink should be called on the navigation graph prior to calling this method to check if the deep link is valid. If an invalid deep link is given, an IllegalArgumentException will be thrown.

Parameters
request: NavDeepLinkRequest

deepLinkRequest to the destination reachable from the current NavGraph

navOptions: NavOptions?

special options for this navigation operation

Throws
kotlin.IllegalArgumentException

if the given deep link request is invalid

Added in 1.0.0
@MainThread
open fun navigate(resId: @IdRes Int, args: Bundle?): Unit

Navigate to a destination from the current navigation graph. This supports both navigating via an action and directly navigating to a destination.

Parameters
resId: @IdRes Int

an action id or a destination id to navigate to

args: Bundle?

arguments to pass to the destination

Throws
kotlin.IllegalStateException

if there is no current navigation node

kotlin.IllegalArgumentException

if the desired destination cannot be found from the current destination

Added in 2.8.0
@MainThread
fun <T : Any> navigate(route: T, builder: NavOptionsBuilder.() -> Unit): Unit

Navigate to a route from an Object in the current NavGraph. If an invalid route is given, an IllegalArgumentException will be thrown.

The target NavDestination must have been created with route from a KClass

If given NavOptions pass in NavOptions.restoreState true, any args passed here as part of the route will be overridden by the restored args.

Parameters
route: T

route from an Object for the destination

builder: NavOptionsBuilder.() -> Unit

DSL for constructing a new NavOptions

Throws
kotlin.IllegalArgumentException

if the given route is invalid

Added in 2.4.0
@MainThread
fun navigate(route: String, builder: NavOptionsBuilder.() -> Unit): Unit

Navigate to a route in the current NavGraph. If an invalid route is given, an IllegalArgumentException will be thrown.

If given NavOptions pass in NavOptions.restoreState true, any args passed here as part of the route will be overridden by the restored args.

Parameters
route: String

route for the destination

builder: NavOptionsBuilder.() -> Unit

DSL for constructing a new NavOptions

Throws
kotlin.IllegalArgumentException

if the given route is invalid

Added in 2.1.0
@MainThread
open fun navigate(
    deepLink: Uri,
    navOptions: NavOptions?,
    navigatorExtras: Navigator.Extras?
): Unit

Navigate to a destination via the given deep link Uri. NavDestination.hasDeepLink should be called on the navigation graph prior to calling this method to check if the deep link is valid. If an invalid deep link is given, an IllegalArgumentException will be thrown.

Parameters
deepLink: Uri

deepLink to the destination reachable from the current NavGraph

navOptions: NavOptions?

special options for this navigation operation

navigatorExtras: Navigator.Extras?

extras to pass to the Navigator

See also
navigate
Added in 2.3.0
@MainThread
open fun navigate(
    request: NavDeepLinkRequest,
    navOptions: NavOptions?,
    navigatorExtras: Navigator.Extras?
): Unit

Navigate to a destination via the given NavDeepLinkRequest. NavDestination.hasDeepLink should be called on the navigation graph prior to calling this method to check if the deep link is valid. If an invalid deep link is given, an IllegalArgumentException will be thrown.

Parameters
request: NavDeepLinkRequest

deepLinkRequest to the destination reachable from the current NavGraph

navOptions: NavOptions?

special options for this navigation operation

navigatorExtras: Navigator.Extras?

extras to pass to the Navigator

Throws
kotlin.IllegalArgumentException

if the given deep link request is invalid

Added in 1.0.0
@MainThread
open fun navigate(resId: @IdRes Int, args: Bundle?, navOptions: NavOptions?): Unit

Navigate to a destination from the current navigation graph. This supports both navigating via an action and directly navigating to a destination.

If given NavOptions pass in NavOptions.restoreState true, any args passed here will be overridden by the restored args.

Parameters
resId: @IdRes Int

an action id or a destination id to navigate to

args: Bundle?

arguments to pass to the destination

navOptions: NavOptions?

special options for this navigation operation

Throws
kotlin.IllegalStateException

if there is no current navigation node

kotlin.IllegalArgumentException

if the desired destination cannot be found from the current destination

Added in 2.8.0
@MainThread
fun <T : Any> navigate(
    route: T,
    navOptions: NavOptions? = null,
    navigatorExtras: Navigator.Extras? = null
): Unit

Navigate to a route from an Object in the current NavGraph. If an invalid route is given, an IllegalArgumentException will be thrown.

The target NavDestination must have been created with route from a KClass

If given NavOptions pass in NavOptions.restoreState true, any args passed here as part of the route will be overridden by the restored args.

Parameters
route: T

route from an Object for the destination

navOptions: NavOptions? = null

special options for this navigation operation

navigatorExtras: Navigator.Extras? = null

extras to pass to the Navigator

Throws
kotlin.IllegalArgumentException

if the given route is invalid

Added in 2.4.0
@MainThread
fun navigate(
    route: String,
    navOptions: NavOptions? = null,
    navigatorExtras: Navigator.Extras? = null
): Unit

Navigate to a route in the current NavGraph. If an invalid route is given, an IllegalArgumentException will be thrown.

If given NavOptions pass in NavOptions.restoreState true, any args passed here as part of the route will be overridden by the restored args.

Parameters
route: String

route for the destination

navOptions: NavOptions? = null

special options for this navigation operation

navigatorExtras: Navigator.Extras? = null

extras to pass to the Navigator

Throws
kotlin.IllegalArgumentException

if the given route is invalid

Added in 1.0.0
@MainThread
open fun navigate(
    resId: @IdRes Int,
    args: Bundle?,
    navOptions: NavOptions?,
    navigatorExtras: Navigator.Extras?
): Unit

Navigate to a destination from the current navigation graph. This supports both navigating via an action and directly navigating to a destination.

If given NavOptions pass in NavOptions.restoreState true, any args passed here will be overridden by the restored args.

Parameters
resId: @IdRes Int

an action id or a destination id to navigate to

args: Bundle?

arguments to pass to the destination

navOptions: NavOptions?

special options for this navigation operation

navigatorExtras: Navigator.Extras?

extras to pass to the Navigator

Throws
kotlin.IllegalStateException

if navigation graph has not been set for this NavController

kotlin.IllegalArgumentException

if the desired destination cannot be found from the current destination

Added in 1.0.0
@MainThread
open fun navigateUp(): Boolean

Attempts to navigate up in the navigation hierarchy. Suitable for when the user presses the "Up" button marked with a left (or start)-facing arrow in the upper left (or starting) corner of the app UI.

The intended behavior of Up differs from Back when the user did not reach the current destination from the application's own task. e.g. if the user is viewing a document or link in the current app in an activity hosted on another app's task where the user clicked the link. In this case the current activity (determined by the context used to create this NavController) will be finished and the user will be taken to an appropriate destination in this app on its own task.

Returns
Boolean

true if navigation was successful, false otherwise

popBackStack

Added in 1.0.0
@MainThread
open fun popBackStack(): Boolean

Attempts to pop the controller's back stack. Analogous to when the user presses the system Back button when the associated navigation host has focus.

Returns
Boolean

true if the stack was popped at least once and the user has been navigated to another destination, false otherwise

popBackStack

Added in 1.0.0
@MainThread
open fun popBackStack(destinationId: @IdRes Int, inclusive: Boolean): Boolean

Attempts to pop the controller's back stack back to a specific destination.

Parameters
destinationId: @IdRes Int

The topmost destination to retain

inclusive: Boolean

Whether the given destination should also be popped.

Returns
Boolean

true if the stack was popped at least once and the user has been navigated to another destination, false otherwise

popBackStack

@MainThread
inline fun <T : Any> popBackStack(inclusive: Boolean, saveState: Boolean = false): Boolean

Attempts to pop the controller's back stack back to a specific destination.

Parameters
<T : Any>

The topmost destination to retain with route from a KClass. The target NavDestination must have been created with route from KClass.

inclusive: Boolean

Whether the given destination should also be popped.

saveState: Boolean = false

Whether the back stack and the state of all destinations between the current destination and T should be saved for later restoration via NavOptions.Builder.setRestoreState or the restoreState attribute using the same T (note: this matching ID is true whether inclusive is true or false).

Returns
Boolean

true if the stack was popped at least once and the user has been navigated to another destination, false otherwise

popBackStack

Added in 2.4.0
@MainThread
open fun popBackStack(
    destinationId: @IdRes Int,
    inclusive: Boolean,
    saveState: Boolean
): Boolean

Attempts to pop the controller's back stack back to a specific destination.

Parameters
destinationId: @IdRes Int

The topmost destination to retain

inclusive: Boolean

Whether the given destination should also be popped.

saveState: Boolean

Whether the back stack and the state of all destinations between the current destination and the destinationId should be saved for later restoration via NavOptions.Builder.setRestoreState or the restoreState attribute using the same destinationId (note: this matching ID is true whether inclusive is true or false).

Returns
Boolean

true if the stack was popped at least once and the user has been navigated to another destination, false otherwise

popBackStack

Added in 2.9.0-alpha04
@MainThread
fun <T : Any> popBackStack(
    route: KClass<T>,
    inclusive: Boolean,
    saveState: Boolean = false
): Boolean

Attempts to pop the controller's back stack back to a specific destination.

Parameters
route: KClass<T>

The topmost destination to retain with route from a KClass. The target NavDestination must have been created with route from KClass.

inclusive: Boolean

Whether the given destination should also be popped.

saveState: Boolean = false

Whether the back stack and the state of all destinations between the current destination and route should be saved for later restoration via NavOptions.Builder.setRestoreState or the restoreState attribute using the same T (note: this matching ID is true whether inclusive is true or false).

Returns
Boolean

true if the stack was popped at least once and the user has been navigated to another destination, false otherwise

popBackStack

Added in 2.8.0
@MainThread
fun <T : Any> popBackStack(route: T, inclusive: Boolean, saveState: Boolean = false): Boolean

Attempts to pop the controller's back stack back to a specific destination.

Parameters
route: T

The topmost destination to retain with route from an Object. The target NavDestination must have been created with route from KClass.

inclusive: Boolean

Whether the given destination should also be popped.

saveState: Boolean = false

Whether the back stack and the state of all destinations between the current destination and the route should be saved for later restoration via NavOptions.Builder.setRestoreState or the restoreState attribute using the same route (note: this matching ID is true whether inclusive is true or false).

Returns
Boolean

true if the stack was popped at least once and the user has been navigated to another destination, false otherwise

popBackStack

Added in 2.4.0
@MainThread
fun popBackStack(route: String, inclusive: Boolean, saveState: Boolean = false): Boolean

Attempts to pop the controller's back stack back to a specific destination.

Parameters
route: String

The topmost destination to retain. May contain filled in arguments as long as it is exact match with route used to navigate.

inclusive: Boolean

Whether the given destination should also be popped.

saveState: Boolean = false

Whether the back stack and the state of all destinations between the current destination and the route should be saved for later restoration via NavOptions.Builder.setRestoreState or the restoreState attribute using the same route (note: this matching ID is true whether inclusive is true or false).

Returns
Boolean

true if the stack was popped at least once and the user has been navigated to another destination, false otherwise

removeOnDestinationChangedListener

Added in 1.0.0
open fun removeOnDestinationChangedListener(
    listener: NavController.OnDestinationChangedListener
): Unit

Removes an OnDestinationChangedListener from this controller. It will no longer receive callbacks.

Parameters
listener: NavController.OnDestinationChangedListener

the listener to remove

restoreState

Added in 1.0.0
@CallSuper
open fun restoreState(navState: Bundle?): Unit

Restores all navigation controller state from a bundle. This should be called before any call to setGraph.

State may be saved to a bundle by calling saveState. Restoring controller state is the responsibility of a NavHost.

Parameters
navState: Bundle?

state bundle to restore

saveState

Added in 1.0.0
@CallSuper
open fun saveState(): Bundle?

Saves all navigation controller state to a Bundle.

State may be restored from a bundle returned from this method by calling restoreState. Saving controller state is the responsibility of a NavHost.

Returns
Bundle?

saved state for this controller

setGraph

Added in 1.0.0
@MainThread
@CallSuper
open fun setGraph(graphResId: @NavigationRes Int): Unit

Sets the navigation graph to the specified resource. Any current navigation graph data (including back stack) will be replaced.

The inflated graph can be retrieved via graph.

Parameters
graphResId: @NavigationRes Int

resource id of the navigation graph to inflate

setGraph

Added in 1.0.0
@MainThread
@CallSuper
open fun setGraph(graph: NavGraph, startDestinationArgs: Bundle?): Unit

Sets the navigation graph to the specified graph. Any current navigation graph data (including back stack) will be replaced.

The graph can be retrieved later via graph.

Parameters
graph: NavGraph

graph to set

startDestinationArgs: Bundle?

arguments to send to the start destination of the graph

See also
setGraph
graph

setGraph

Added in 1.0.0
@MainThread
@CallSuper
open fun setGraph(graphResId: @NavigationRes Int, startDestinationArgs: Bundle?): Unit

Sets the navigation graph to the specified resource. Any current navigation graph data (including back stack) will be replaced.

The inflated graph can be retrieved via graph.

Parameters
graphResId: @NavigationRes Int

resource id of the navigation graph to inflate

startDestinationArgs: Bundle?

arguments to send to the start destination of the graph

Public properties

currentBackStackEntry

Added in 2.3.0
open val currentBackStackEntryNavBackStackEntry?

The topmost NavBackStackEntry.

Returns
NavBackStackEntry?

the topmost entry on the back stack or null if the back stack is empty

currentBackStackEntryFlow

Added in 2.4.0
val currentBackStackEntryFlowFlow<NavBackStackEntry>

A Flow that will emit the currently active NavBackStackEntry whenever it changes. If there is no active NavBackStackEntry, no item will be emitted.

currentDestination

Added in 1.0.0
open val currentDestinationNavDestination?

The current destination.

graph

Added in 1.0.0
open var graphNavGraph

The topmost navigation graph associated with this NavController.

When this is set any current navigation graph data (including back stack) will be replaced.

Throws
kotlin.IllegalStateException

if called before setGraph().

See also
setGraph
Added in 1.0.0
open val navInflaterNavInflater

The inflater for this controller.

Returns
NavInflater

inflater for loading navigation resources

Added in 1.0.0
open val navigatorProviderNavigatorProvider

The NavController's NavigatorProvider. All Navigators used to construct the navigation graph for this nav controller should be added to this navigator provider before the graph is constructed.

This can only be set before the graph is set via setGraph().

Generally, the Navigators are set for you by the NavHost hosting this NavController and you do not need to manually interact with the navigator provider.

Throws
kotlin.IllegalStateException

If this set called after setGraph()

previousBackStackEntry

Added in 2.3.0
open val previousBackStackEntryNavBackStackEntry?

The previous visible NavBackStackEntry.

This skips over any NavBackStackEntry that is associated with a NavGraph.

Returns
NavBackStackEntry?

the previous visible entry on the back stack or null if the back stack has less than two visible entries

visibleEntries

Added in 2.4.0
val visibleEntriesStateFlow<List<NavBackStackEntry>>

A StateFlow that will emit the currently visible NavBackStackEntries whenever they change. If there is no visible NavBackStackEntry, this will be set to an empty list.

  • CREATED entries are listed first and include all entries that are in the process of completing their exit transition. Note that this can include entries that have been popped off the Navigation back stack.

  • STARTED entries on the back stack are next and include all entries that are running their enter transition and entries whose destination is partially covered by a FloatingWindow destination

  • The last entry in the list is the topmost entry in the back stack and is in the RESUMED state only if its enter transition has completed. Otherwise it too will be STARTED.

Note that the Lifecycle of any entry cannot be higher than the containing Activity/Fragment - if the Activity is not RESUMED, no entry will be RESUMED, no matter what the transition state is.

Extension functions

inline fun NavController.createGraph(
    id: @IdRes Int = 0,
    startDestination: @IdRes Int,
    builder: NavGraphBuilder.() -> Unit
): NavGraph

Construct a new NavGraph

Parameters
id: @IdRes Int = 0

the graph's unique id

startDestination: @IdRes Int

the route for the start destination

builder: NavGraphBuilder.() -> Unit

the builder used to construct the graph

inline fun NavController.createGraph(
    id: @IdRes Int = 0,
    startDestination: @IdRes Int,
    builder: DynamicNavGraphBuilder.() -> Unit
): NavGraph

Construct a new androidx.navigation.NavGraph that supports dynamic navigation destinations

inline fun NavController.createGraph(
    startDestination: String,
    route: String? = null,
    builder: NavGraphBuilder.() -> Unit
): NavGraph

Construct a new NavGraph

Parameters
startDestination: String

the route for the start destination

route: String? = null

the route for the graph

builder: NavGraphBuilder.() -> Unit

the builder used to construct the graph

inline fun NavController.createGraph(
    startDestination: String,
    route: String? = null,
    builder: DynamicNavGraphBuilder.() -> Unit
): NavGraph

Construct a new androidx.navigation.NavGraph that supports dynamic navigation destinations

inline fun NavController.createGraph(
    startDestination: Any,
    route: KClass<*>? = null,
    typeMap: Map<KTypeNavType<*>> = emptyMap(),
    builder: NavGraphBuilder.() -> Unit
): NavGraph

Construct a new NavGraph

Parameters
startDestination: Any

the starting destination's route from an Object for this NavGraph. The respective NavDestination must be added as a KClass in order to match.

route: KClass<*>? = null

the graph's unique route from a KClass

typeMap: Map<KTypeNavType<*>> = emptyMap()

A mapping of KType to custom NavType<*> in the route. May be empty if route does not use custom NavTypes.

builder: NavGraphBuilder.() -> Unit

the builder used to construct the graph

inline fun NavController.createGraph(
    startDestination: Any,
    route: KClass<*>? = null,
    typeMap: Map<KTypeNavType<*>> = emptyMap(),
    builder: DynamicNavGraphBuilder.() -> Unit
): NavGraph

Construct a new androidx.navigation.NavGraph that supports dynamic navigation destinations

Parameters
startDestination: Any

the starting destination's route from an Object for this NavGraph. The respective NavDestination must be added as a KClass in order to match.

route: KClass<*>? = null

the graph's unique route from a KClass

typeMap: Map<KTypeNavType<*>> = emptyMap()

A mapping of KType to custom NavType<*> in the route. May be empty if route does not use custom NavTypes.

builder: DynamicNavGraphBuilder.() -> Unit

the builder used to construct the graph

inline fun NavController.createGraph(
    startDestination: KClass<*>,
    route: KClass<*>? = null,
    typeMap: Map<KTypeNavType<*>> = emptyMap(),
    builder: NavGraphBuilder.() -> Unit
): NavGraph

Construct a new NavGraph

Parameters
startDestination: KClass<*>

the starting destination's route from a KClass for this NavGraph. The respective NavDestination must be added as a KClass in order to match.

route: KClass<*>? = null

the graph's unique route from a KClass

typeMap: Map<KTypeNavType<*>> = emptyMap()

A mapping of KType to custom NavType<*> in the route. May be empty if route does not use custom NavTypes.

builder: NavGraphBuilder.() -> Unit

the builder used to construct the graph

inline fun NavController.createGraph(
    startDestination: KClass<*>,
    route: KClass<*>? = null,
    typeMap: Map<KTypeNavType<*>> = emptyMap(),
    builder: DynamicNavGraphBuilder.() -> Unit
): NavGraph

Construct a new androidx.navigation.NavGraph that supports dynamic navigation destinations

Parameters
startDestination: KClass<*>

the starting destination's route from a KClass for this NavGraph. The respective NavDestination must be added as a KClass in order to match.

route: KClass<*>? = null

the graph's unique route from a KClass

typeMap: Map<KTypeNavType<*>> = emptyMap()

A mapping of KType to custom NavType<*> in the route. May be empty if route does not use custom NavTypes.

builder: DynamicNavGraphBuilder.() -> Unit

the builder used to construct the graph

fun NavController.navigateUp(appBarConfiguration: AppBarConfiguration): Boolean

Handles the Up button by delegating its behavior to the given NavController.

Returns
Boolean

True if the NavController was able to navigate up.

fun NavController.navigateUp(drawerLayout: Openable?): Boolean

Handles the Up button by delegating its behavior to the given NavController.

This is equivalent to calling NavController.navigateUp if the Openable layout is null.

Returns
Boolean

True if the NavController was able to navigate up.

currentBackStackEntryAsState

@Composable
fun NavController.currentBackStackEntryAsState(): State<NavBackStackEntry?>

Gets the current navigation back stack entry as a MutableState. When the given navController changes the back stack due to a NavController.navigate or NavController.popBackStack this will trigger a recompose and return the top entry on the back stack.

Returns
State<NavBackStackEntry?>

a mutable state of the current back stack entry

currentBackStackEntryAsState

@Composable
fun NavController.currentBackStackEntryAsState(): State<NavBackStackEntry?>

Gets the current navigation back stack entry as a State. When the given navController changes the back stack due to a NavController.navigate or NavController.popBackStack this will trigger a recompose and return the top entry on the back stack.

Returns
State<NavBackStackEntry?>

state of the current back stack entry