NavDestination



NavDestination represents one node within an overall navigation graph.

Each destination is associated with a Navigator which knows how to navigate to this particular destination.

Destinations declare a set of putAction that they support. These actions form a navigation API for the destination; the same actions declared on different destinations that fill similar roles allow application code to navigate based on semantic intent.

Each destination has a set of arguments that will be applied when navigating to that destination. Any default values for those arguments can be overridden at the time of navigation.

NavDestinations should be created via Navigator.createDestination.

Summary

Public companion functions

inline Boolean

Checks if the NavDestination's route was generated from T

Cmn
android
Boolean
<T : Any> NavDestination.hasRoute(route: KClass<T>)

Checks if the NavDestination's route was generated from T

Cmn
android

Public companion properties

Sequence<NavDestination>

Provides a sequence of the NavDestination's hierarchy.

Cmn
android

Public constructors

NavDestination(navigatorName: String)
Cmn
android

NavDestinations should be created via Navigator.createDestination.

Cmn
android

Public functions

Unit
addArgument(argumentName: String, argument: NavArgument)

Sets an argument type for an argument name

Cmn
android
Unit
addDeepLink(navDeepLink: NavDeepLink)

Add a deep link to this destination.

Cmn
android
Unit
addDeepLink(uriPattern: String)

Add a deep link to this destination.

Cmn
android
open Boolean
hasDeepLink(deepLink: NavUri)

Checks the given deep link NavUri, and determines whether it matches a Uri pattern added to the destination by a call to addDeepLink .

Cmn
android
open Boolean
hasDeepLink(deepLinkRequest: NavDeepLinkRequest)

Checks the given NavDeepLinkRequest, and determines whether it matches a NavDeepLink added to the destination by a call to addDeepLink.

Cmn
android
Unit
removeArgument(argumentName: String)

Unsets the argument type for an argument name.

Cmn
android

Public properties

Map<StringNavArgument>

The arguments supported by this destination.

Cmn
android
open String
Cmn
android
CharSequence?

The descriptive label of this destination.

Cmn
android
String

The name associated with this destination's Navigator.

Cmn
android
NavGraph?

Gets the NavGraph that contains this destination.

Cmn
android
String?

The destination's unique route.

Cmn
android

Public companion functions

hasRoute

inline fun <T : Any> NavDestination.hasRoute(): Boolean

Checks if the NavDestination's route was generated from T

Returns true if equal, false otherwise.

Parameters
<T : Any>

the route from KClass

hasRoute

fun <T : Any> NavDestination.hasRoute(route: KClass<T>): Boolean

Checks if the NavDestination's route was generated from T

Returns true if equal, false otherwise.

Parameters
route: KClass<T>

the route from KClass

Public companion properties

hierarchy

val NavDestination.hierarchySequence<NavDestination>

Provides a sequence of the NavDestination's hierarchy. The hierarchy starts with this destination itself and is then followed by this destination's NavDestination.parent, then that graph's parent, and up the hierarchy until you've reached the root navigation graph.

Public constructors

NavDestination(navigatorName: String)
NavDestination(navigator: Navigator<NavDestination>)

NavDestinations should be created via Navigator.createDestination.

This constructor requires that the given Navigator has a Navigator.Name annotation.

Public functions

addArgument

fun addArgument(argumentName: String, argument: NavArgument): Unit

Sets an argument type for an argument name

Parameters
argumentName: String

argument object to associate with destination

argument: NavArgument

argument object to associate with destination

addDeepLink

fun addDeepLink(navDeepLink: NavDeepLink): Unit

Add a deep link to this destination. Uris that match the given NavDeepLink uri sent to NavController.handleDeepLink or NavController.navigate will trigger navigating to this destination.

In addition to a direct Uri match, the following features are supported:

Uris without a scheme are assumed as http and https. For example, www.example.com will match http://www.example.com and https://www.example.com. Placeholders in the form of {placeholder_name} matches 1 or more characters. The String value of the placeholder will be available in the arguments SavedState with a key of the same name. For example, http://www.example.com/users/{id} will match http://www.example.com/users/4. The .* wildcard can be used to match 0 or more characters.

These Uris can be declared in your navigation XML files by adding one or more <deepLink app:uri="uriPattern" /> elements as a child to your destination.

Custom actions and mimetypes are also supported by NavDeepLink and can be declared in your navigation XML files by adding <app:action="android.intent.action.SOME_ACTION" /> or <app:mimetype="type/subtype" /> as part of your deepLink declaration.

Deep link Uris, actions, and mimetypes added in navigation XML files will automatically replace instances of ${applicationId} with the applicationId of your app. Programmatically added deep links should use Context.getPackageName directly when constructing the uriPattern.

When matching deep links for calls to NavController.handleDeepLink or NavController.navigate the order of precedence is as follows: the deep link with the most matching arguments will be chosen, followed by the deep link with a matching action, followed by the best matching mimeType (e.i. when matching mimeType image/jpg: image/ * *\/jpg *\/ *).

Parameters
navDeepLink: NavDeepLink

The NavDeepLink to add as a deep link

addDeepLink

fun addDeepLink(uriPattern: String): Unit

Add a deep link to this destination. Matching Uris sent to NavController.handleDeepLink or NavController.navigate will trigger navigating to this destination.

In addition to a direct Uri match, the following features are supported:

  • Uris without a scheme are assumed as http and https. For example, www.example.com will match http://www.example.com and https://www.example.com.

  • Placeholders in the form of {placeholder_name} matches 1 or more characters. The parsed value of the placeholder will be available in the arguments SavedState with a key of the same name. For example, http://www.example.com/users/{id} will match http://www.example.com/users/4.

  • The .* wildcard can be used to match 0 or more characters.

These Uris can be declared in your navigation XML files by adding one or more <deepLink app:uri="uriPattern" /> elements as a child to your destination.

Deep links added in navigation XML files will automatically replace instances of ${applicationId} with the applicationId of your app. Programmatically added deep links should use Context.getPackageName directly when constructing the uriPattern.

Parameters
uriPattern: String

The uri pattern to add as a deep link

hasDeepLink

open fun hasDeepLink(deepLink: NavUri): Boolean

Checks the given deep link NavUri, and determines whether it matches a Uri pattern added to the destination by a call to addDeepLink . It returns true if the deep link is a valid match, and false otherwise.

This should be called prior to NavController.navigate to ensure the deep link can be navigated to.

Parameters
deepLink: NavUri

to the destination reachable from the current NavGraph

Returns
Boolean

True if the deepLink exists for the destination.

hasDeepLink

open fun hasDeepLink(deepLinkRequest: NavDeepLinkRequest): Boolean

Checks the given NavDeepLinkRequest, and determines whether it matches a NavDeepLink added to the destination by a call to addDeepLink. It returns true if the request is a valid match, and false otherwise.

This should be called prior to NavController.navigate to ensure the deep link can be navigated to.

Parameters
deepLinkRequest: NavDeepLinkRequest

to the destination reachable from the current NavGraph

Returns
Boolean

True if the deepLink exists for the destination.

removeArgument

fun removeArgument(argumentName: String): Unit

Unsets the argument type for an argument name.

Parameters
argumentName: String

argument to remove

Public properties

arguments

val argumentsMap<StringNavArgument>

The arguments supported by this destination. Returns a read-only map of argument names to NavArgument objects that can be used to check the type, default value and nullability of the argument.

To add and remove arguments for this NavDestination use addArgument and removeArgument.

Returns
Map<StringNavArgument>

Read-only map of argument names to arguments.

displayName

open val displayNameString

label

var labelCharSequence?

The descriptive label of this destination.

val navigatorNameString

The name associated with this destination's Navigator.

parent

var parentNavGraph?

Gets the NavGraph that contains this destination. This will be set when a destination is added to a NavGraph via NavGraph.addDestination.

route

var routeString?

The destination's unique route. Setting this will also update the id of the destinations so custom destination ids should only be set after setting the route.

Returns
String?

this destination's route, or null if no route is set

Throws
kotlin.IllegalArgumentException

is the given route is empty