Using Composition Local for Dependency Injection in Jetpack Compose

Composition Local is a powerful feature in Jetpack Compose that allows you to pass data down the composable tree without having to explicitly pass it through parameters. This is particularly useful for dependency injection, where you want to provide dependencies to your composables in a clean and efficient way.

By defining a Composition Local for your dependencies, you can easily access them within your composables, promoting a cleaner architecture and reducing boilerplate code.

val LocalUserRepository = compositionLocalOf { error("No UserRepository provided") }

@Composable
fun MyApp() {
    val userRepository = UserRepository() // Create your repository
    CompositionLocalProvider(LocalUserRepository provides userRepository) {
        // Now you can access LocalUserRepository in any child composable
        HomeScreen()
    }
}

@Composable
fun HomeScreen() {
    val userRepository = LocalUserRepository.current
    // Use userRepository to fetch user data
}