В чем разница между CompositionLocalStatic и CompositionLocal

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

Ответ

CompositionLocal — это динамический механизм передачи данных через дерево композиции, который автоматически обновляет зависящие от него компоненты при изменении значения. Используется через CompositionLocalProvider.

CompositionLocalStatic — это статический аналог, который не обновляет компоненты при изменении значения. Подходит для константных данных, которые не меняются во время выполнения.

Пример:

val LocalDynamicTheme = compositionLocalOf { LightTheme } // Обновляет UI при изменении
val LocalStaticTheme = staticCompositionLocalOf { LightTheme } // Не обновляет UI

@Composable
fun ThemedApp() {
    CompositionLocalProvider(LocalDynamicTheme provides DarkTheme) {
        // UI обновится при изменении темы
    }
}