TGViewer
Compose Broadcast Compose Broadcast @compose_broadcast · 5.9K subscribers
Post #925 6.63K
⚙️ Compose 1.11: Composition host defaults — мелочь, важная для KMP

В апрельском релизе Jetpack Compose под номером 1.11 в compose-runtime завезли четыре новых API: HostDefaultProvider, LocalHostDefaultProvider, HostDefaultKey и ViewTreeHostDefaultKey. Плюс билдер compositionLocalWithHostDefaultOf для авторов библиотек.

Он позволяют объявить CompositionLocal, у которого дефолтное значение резолвится из окружения хоста — например, через Android View tag'и (как это делает ViewTreeLifecycleOwner или ViewTreeOnBackPressedDispatcherOwner). Раньше для такого паттерна была обязательна зависимость на compose-ui. Теперь только compose-runtime.

Раньше чтобы из библиотеки достать значение из View tree, приходилось тянуть compose-ui ради LocalView и платформенные функции поиска по дереву View. Код жил в Android-сорсах, в commonMain такое не положишь:
    // androidMain — compose-ui + Android-only API
val LocalMyOwner = compositionLocalOf<MyOwner?> { null }

@Composable
fun ProvideMyOwner(content: @Composable () -> Unit) {
val view = LocalView.current
val owner = remember(view) {
view.findViewTreeMyOwner()
}
CompositionLocalProvider(LocalMyOwner provides owner) {
content()
}
}


С новым API описание CompositionLocal живёт в commonMain и тянет только compose-runtime. Связку с View tree описывает ViewTreeHostDefaultKey, и хост сам отдаёт значение через своего провайдера:

    // commonMain — только compose-runtime
val MyOwnerKey = ViewTreeHostDefaultKey<MyOwner>(
viewTagId = R.id.view_tree_my_owner
)

val LocalMyOwner = compositionLocalWithHostDefaultOf(MyOwnerKey)

// Использование — без изменений
@Composable
fun MyComponent() {
val owner = LocalMyOwner.current
// ...
}


Теперь авторы Compose библиотек могут держать определение CompositionLocal в общем модуле без зависимости на compose-ui. Профит - меньше транзитивных зависимостей в KMP-библиотеках и более чистое разделение слоёв runtime и UI.

#Compose #CMP
More from @compose_broadcast
  1. Sep 17, 2026В Compose 1.13 появится полноценный Blur для контента через Modifier #Compose
  2. Sep 14, 2026⚙️ Вышел Compose HotSwan 2.0.0 - Hot Reload для Android, iOS и Desktop. В новой версии про…
  3. Sep 14, 2026⚙️ Compose Web можно выложить как офлайн-приложение В Issue CMP-10781 в официальном баг-тр…
  4. Sep 9, 2026🚀 Вышла новая альфа-версия адаптации CMP для ОС Аврора (v0.0.5) Прошёл квартал — а значит…
  5. Sep 7, 2026🐱 compose-recomposition-highlighter - отслеживание статистики рекомпозиций в Android След…
  6. Sep 7, 2026⚙️ Анимация смены чисел на Compose. Как сделали тут #Compose #Анимация
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →