Ответ
CompositionLocal позволяет передавать данные через дерево композиции без явной передачи через параметры. Полезен для:
- Глобальные зависимости (темы, локализация, конфигурации):
CompositionLocalProvider(LocalContentAlpha provides 0.5f) {
Text("Полупрозрачный текст")
}
- Контекстные значения (размеры экрана, навигация):
val density = LocalDensity.current
val pxValue = with(density) { 16.dp.toPx() }
- Кастомные провайдеры (логирование, DI):
val LocalLogger = staticCompositionLocalOf<Logger> { error("Logger not provided") }
// Где-то в корне:
CompositionLocalProvider(LocalLogger provides LoggerImpl()) {
MyApp()
}
⚠️ Осторожно! Злоупотребление может усложнить отладку. Используйте для действительно глобальных/контекстных данных.