Skip to main content

Use navigation

Required dependencies

This page is standalone. The Android navigation artifact supplies the platform-neutral route model transitively.

build.gradle.kts
repositories { mavenCentral() }

dependencies {
implementation("com.viewcompose:viewcompose-material3-android:0.1.0-alpha01")
implementation("com.viewcompose:viewcompose-navigation-android:0.1.0-alpha01")
implementation("androidx.activity:activity:1.12.4")
implementation("com.google.android.material:material:1.13.0")
}

Create NavigationTutorialActivity.kt:

package com.viewcompose.samples.tutorials

import android.os.Bundle
import androidx.activity.ComponentActivity
import com.viewcompose.material3.android.setMaterial3UiContent
import com.viewcompose.navigation.NavHost
import com.viewcompose.navigation.rememberNavHostController
import com.viewcompose.navigation.core.NavRoute
import com.viewcompose.ui.modifier.Modifier
import com.viewcompose.ui.modifier.fillMaxSize
import com.viewcompose.ui.modifier.padding
import com.viewcompose.ui.unit.dp
import com.viewcompose.ui.foundation.Button
import com.viewcompose.ui.foundation.Column
import com.viewcompose.ui.foundation.Text
import com.viewcompose.ui.foundation.TextDefaults

private const val HOME = "home"
private const val DETAILS = "details"

class NavigationTutorialActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setMaterial3UiContent {
val controller = rememberNavHostController(NavRoute(HOME))

NavHost(controller = controller) { entry ->
Column(
spacing = 12.dp,
modifier = Modifier.fillMaxSize().padding(24.dp),
) {
when (entry.route.name) {
HOME -> {
Text("Home", style = TextDefaults.titleLargeStyle())
Button(
"Open details",
onClick = { controller.navigate(NavRoute(DETAILS)) },
)
}
DETAILS -> {
Text("Details", style = TextDefaults.titleLargeStyle())
Button("Back", onClick = controller::popBackStack)
}
else -> error("Unknown route ${entry.route.name}")
}
}
}
}
}
}

The remembered controller owns the committed back stack. NavHost renders the current NavRoute and connects Android system Back to the same stack. Call navigate or popBackStack from UI events after the host is mounted.

Verify the result

Press Open details, then return with the on-screen Back action. Open Details again and use Android system Back. Both paths must return to Home exactly once. Compile with ./gradlew :samples:tutorials:assembleDebug.

For restoration, explicit failure handling, and predictive Back acceptance, continue with Configure a production navigation host.