Skip to content

Instantly share code, notes, and snippets.

@SubSide
Created January 16, 2023 14:29
Show Gist options
  • Save SubSide/1ed16a49b85e971c5199f32a05125cdc to your computer and use it in GitHub Desktop.
Save SubSide/1ed16a49b85e971c5199f32a05125cdc to your computer and use it in GitHub Desktop.
Example for providing a CompositionLocal for the NavController so you don't need to pass it around
import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.navigation.NavController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
val LocalNavController = staticCompositionLocalOf<NavController> {
error("CompositionLocal LocalNavController not present")
}
@Composable
fun NavigationProvider(navController: NavController, content: @Composable () -> Unit) {
CompositionLocalProvider(
LocalNavController provides navController,
content = content
)
}
@Composable
fun MainNavigation() {
val navController = rememberNavController()
NavigationProvider(navController) {
NavHost(navController = navController, startDestination = "home") {
composable(route = "home") {
HomeScreen()
}
composable(route = "detail") {
// ...
}
}
}
}
@Composable
fun HomeScreen() {
val navController = LocalNavController.current
Button(onClick = { navController.navigate("detail") }) {
Text("Test")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment