ActivityScreen

abstract class ActivityScreen<K : NavKey>

Typed base class for NavEase screens — the recommended way to define screens without annotations or code generation.

Extend this class and override Content. The generic parameter K is the specific NavKey subclass this screen handles, so Content receives a fully-typed navKey — no casting, no xxxArgs() extension needed.

Usage

// 1. Define your NavKey sealed class:
@Serializable sealed class AppScreens : NavKey {
@Serializable data object Home : AppScreens()
@Serializable data object About : AppScreens()
@Serializable data class Detail(val id: String) : AppScreens()
}

// 2. Extend ActivityScreen for each screen — navKey is already the right type:
class HomeScreen : ActivityScreen<AppScreens.Home>() {
@Composable
override fun Content(navKey: AppScreens.Home, navController: NavController) {
Button(onClick = { navController.navigate(AppScreens.Detail(id = "abc")) }) {
Text("Open Detail")
}
}
}

class DetailScreen : ActivityScreen<AppScreens.Detail>() {
@Composable
override fun Content(navKey: AppScreens.Detail, navController: NavController) {
Text(navKey.id) // ← typed! no casting
}
}

// 3. Host — register screens inline, no graph DSL required:
@Composable fun App() {
NavEaseHost<AppScreens>(start = AppScreens.Home) {
add(HomeScreen())
add(AboutScreen())
add(DetailScreen())
}
}

Type Parameters

K

The NavKey subclass this screen handles (e.g. AppScreens.Detail). Must be annotated with @Serializable.

Constructors

Link copied to clipboard
constructor()

Functions

Link copied to clipboard
abstract fun Content(navKey: K, navEaseController: NavEaseController)

Composable entry point for this screen.