Что такое CompositionLocal в Jetpack Compose

«Что такое CompositionLocal в Jetpack Compose» — вопрос из категории Jetpack Compose, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

CompositionLocal — это механизм в Jetpack Compose для неявной передачи данных через дерево композиции без явной передачи параметров через каждый компонент.

Пример:

val LocalTheme = compositionLocalOf { LightTheme }

@Composable
fun App() {
    CompositionLocalProvider(LocalTheme provides DarkTheme) {
        // Дочерние компоненты могут получить тему через LocalTheme.current
        ChildComponent()
    }
}

@Composable
fun ChildComponent() {
    val theme = LocalTheme.current // DarkTheme
    Text("Current theme: $theme")
}

Когда использовать:

  • Для глобальных данных (темы, локализация, конфигурация).
  • Чтобы избежать "пробрасывания" параметров через множество компонентов.

Осторожно: Злоупотребление может усложнить понимание кода, так как зависимости становятся неявными.