Spec-Zone.ru › Kotlin 2

Что нового в Compose Multiplatform 1.10.3

Основные нововведения этого выпуска:

  • Единая аннотация @Preview

  • Поддержка Navigation 3

  • Встроенный Compose Hot Reload

Полный список изменений этого выпуска можно найти на GitHub. Сведения о версиях отдельных компонентов см. в разделе Зависимости.

Несовместимые изменения и устаревшие API

Устаревшие псевдонимы зависимостей

Псевдонимы зависимостей, поддерживаемые плагином Compose Multiplatform Gradle (compose.ui и другие), объявлены устаревшими в выпуске 1.10.0-beta01. Мы рекомендуем добавлять прямые ссылки на библиотеки в каталоги версий. Рекомендуемые ссылки указаны в соответствующих уведомлениях об устаревании.

Это изменение должно сделать управление зависимостями библиотек Compose Multiplatform более прозрачным. В будущем мы надеемся предоставить BOM для Compose Multiplatform, чтобы упростить настройку совместимых версий.

Устаревшая PredictiveBackHandler()

Функция PredictiveBackHandler() была добавлена в Compose Multiplatform, чтобы перенести жест возврата Android на другие платформы. С выпуском Navigation 3 старая реализация объявлена устаревшей в пользу новой библиотеки Navigation Event и её API. В частности, вместо функции PredictiveBackHandler() теперь следует использовать новую функцию NavigationBackHandler(), которая оборачивает более универсальную реализацию NavigationEventHandler().

Простейший вариант миграции может выглядеть так:

         PredictiveBackHandler(enabled = true) { progress ->
            try {
                progress.collect { event ->
                    // Animate the back gesture progress
                }
                // Process the completed back gesture
            } catch(e: Exception) {
                // Process the canceled back gesture
            }
        }
    
        // Use an empty state as a stub to satisfy the required argument
        val navState = rememberNavigationEventState(NavigationEventInfo.None)
        NavigationBackHandler(
            state = navState,
            isBackEnabled = true,
            onBackCancelled = {
                // Process the canceled back gesture
            },
            onBackCompleted = {
              // Process the completed back gesture
            }
        )
        LaunchedEffect(navState.transitionState) {
            val transitionState = navState.transitionState
            if (transitionState is NavigationEventTransitionState.InProgress) {
                val progress = transitionState.latestEvent.progress
                // Animate the back gesture progress
            }
        }
    

Здесь:

  • Параметр state обязателен: NavigationEventInfo предназначен для хранения контекстной информации о состоянии пользовательского интерфейса. Если пока нечего сохранять, в качестве заглушки можно использовать NavigationEventInfo.None.

  • Параметр onBack разделён на onBackCancelled и onBackCompleted, поэтому отслеживать отменённые жесты отдельно не требуется.

  • Свойство NavigationEventState.transitionState помогает отслеживать ход физического жеста.

Описание реализации см. на странице NavigationEventHandler в справочнике API Navigation Event.

Повышена минимальная версия Kotlin

Если в проекте используются нативные или веб-таргеты, для работы новейших функций потребуется обновить Kotlin до версии 2.2.20.

Все платформы

Единая аннотация @Preview

Мы унифицировали подход к предварительному просмотру на разных платформах. Теперь в исходном наборе commonMain можно использовать аннотацию androidx.compose.ui.tooling.preview.Preview.

Все остальные аннотации, например org.jetbrains.compose.ui.tooling.preview.Preview и предназначенная для Desktop androidx.compose.desktop.ui.tooling.preview.Preview, объявлены устаревшими.

Автоматическое изменение размера представлений для взаимодействия

Теперь Compose Multiplatform поддерживает автоматическое изменение размера нативных элементов взаимодействия как в Desktop, так и в iOS. Эти элементы могут адаптировать макет под своё содержимое, поэтому больше не нужно вручную рассчитывать точные размеры и заранее задавать фиксированные габариты.

  • В Desktop размер SwingPanel автоматически подстраивается под минимальный, предпочтительный и максимальный размеры встроенного компонента.

  • В iOS представления для взаимодействия с UIKit теперь можно размещать с учётом размера, необходимого представлению (внутреннего размера содержимого). Это позволяет правильно размещать представления SwiftUI (с помощью UIHostingController), а также простые подклассы UIView, не зависящие от NSLayoutConstraints.

Стабильные свойства Popup и Dialog

Следующие свойства в DialogProperties получили статус стабильных и больше не являются экспериментальными: usePlatformInsets, useSoftwareKeyboardInset и scrimColor.

Аналогично, свойства usePlatformDefaultWidth и usePlatformInsets в PopupProperties также получили статус стабильных.

Уровень устаревания перегрузок Popup без параметра PopupProperties изменён на ERROR, чтобы обеспечить использование обновлённого API.

Skia обновлена до Milestone 138

Версия Skia, используемая Compose Multiplatform через Skiko, обновлена до Milestone 138.

Ранее использовалась Skia Milestone 132. Изменения между этими версиями описаны в примечаниях к выпуску.

Поддержка Navigation 3

Navigation 3 — новая библиотека навигации, предназначенная для работы с Compose. Navigation 3 предоставляет полный контроль над стеком возврата, а переход к пунктам назначения и обратно сводится к добавлению и удалению элементов списка. О новых руководящих принципах и принятых решениях можно прочитать в документации Navigation 3 и в публикации в блоге с анонсом.

Compose Multiplatform 1.10.0-beta01 предоставляет поддержку Alpha для использования новых API навигации на нецелевых платформах Android. Выпущены следующие мультиплатформенные артефакты:

  • Библиотека пользовательского интерфейса Navigation 3, org.jetbrains.androidx.navigation3:navigation3-ui

  • ViewModel для Navigation 3, org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-navigation3

  • Адаптивные макеты Material 3 для Navigation 3, org.jetbrains.compose.material3.adaptive:adaptive-navigation3

Пример мультиплатформенной реализации Navigation 3 можно найти в примере nav3-recipes, созданном на основе оригинального репозитория Android.

Некоторые особенности реализации для отдельных платформ:

  • В iOS жесты панорамирования от конечного края экрана теперь можно настраивать с помощью параметра EndEdgePanGestureBehavior (по умолчанию — Disabled). «Конечный край» — это правый край экрана в интерфейсах LTR и левый край в интерфейсах RTL. Начальный край противоположен конечному и всегда связан с жестом возврата.

  • В веб-приложениях нажатие клавиши Esc в браузере на компьютере теперь возвращает пользователя на предыдущий экран (а также закрывает диалоговые окна, всплывающие окна и некоторые виджеты, например SearchBar из Material 3), как это уже работает в приложениях для Desktop.

  • Поддержка навигации по истории браузера и использования пункта назначения в адресной строке не будет добавлена в Navigation 3 в Compose Multiplatform 1.10. Это отложено до более поздней версии мультиплатформенной библиотеки.

iOS

Внутренние отступы окна

Теперь Compose Multiplatform поддерживает WindowInsetsRulers, предоставляющий средства для позиционирования и изменения размера элементов интерфейса с учётом внутренних отступов окна, например области строки состояния, панели навигации или экранной клавиатуры.

В новом подходе к управлению внутренними отступами окна используется единая реализация для получения платформенных данных об отступах окна. Это означает, что и WindowInsets, и WindowInsetsRulers используют общий механизм согласованного управления отступами.

Ранее для WindowInsets.Companion.captionBar не был указан @Composable. Мы добавили атрибут @Composable, чтобы обеспечить одинаковое поведение на разных платформах.

Улучшенная настройка IME

В дополнение к настройке IME для iOS, добавленной в версии 1.9.0, в этом выпуске появились новые API для настройки представлений ввода текста с помощью PlatformImeOptions.

Эти новые API позволяют настраивать интерфейс ввода, который отображается, когда поле получает фокус и запускает IME:

  • UIResponder.inputView задаёт пользовательское представление ввода, заменяющее стандартную системную клавиатуру.

  • UIResponder.inputAccessoryView задаёт пользовательское дополнительное представление, которое подключается к системной клавиатуре или пользовательскому inputView при активации IME.

Размещение представлений взаимодействия поверх интерфейса

Теперь представления UIKitView и UIKitViewController можно размещать поверх интерфейса Compose с помощью экспериментального флага placedAsOverlay. Этот флаг позволяет представлениям взаимодействия поддерживать прозрачный фон и нативные шейдерные эффекты.

Чтобы отобразить представление взаимодействия поверх остальных элементов, используйте аннотацию @OptIn(ExperimentalComposeUiApi::class) и задайте для параметра placedAsOverlay значение true в UIKitInteropProperties:

UIKitViewController(
    modifier = modifier,
    update = {},
    factory = { factory.createNativeMap() },
    properties = UIKitInteropProperties(placedAsOverlay = true)
)

Обратите внимание: при такой конфигурации представление отображается над слоем интерфейса Compose и, следовательно, визуально перекрывает все остальные composable-элементы, расположенные в той же области.

Web

Кэширование ресурсов

Теперь Compose Multiplatform использует API кэша Web для кэширования успешных ответов с ресурсами статики и строковыми ресурсами. Такой подход позволяет избежать задержек, связанных со стандартным кэшем браузера, который проверяет сохранённое содержимое повторными HTTP-запросами. Это может быть особенно медленно при низкой пропускной способности соединения. Кэш очищается при каждом запуске приложения или обновлении страницы, чтобы ресурсы соответствовали текущему состоянию приложения.

Подробнее см. в запросе на слияние и документации «Кэширование веб-ресурсов».

Desktop

Интеграция Compose Hot Reload

Теперь плагин Compose Hot Reload включён в состав плагина Compose Multiplatform Gradle. Больше не нужно настраивать плагин Hot Reload отдельно: по умолчанию он включён в проектах Compose Multiplatform, предназначенных для Desktop.

Что это означает для проектов, в которых плагин Compose Hot Reload объявлен явно:

  • Объявление можно безопасно удалить, чтобы использовать версию, предоставляемую плагином Compose Multiplatform Gradle.

  • Если оставить объявление конкретной версии, будет использоваться именно она, а не встроенная версия.

Минимальная версия Kotlin для встроенного плагина Compose Hot Reload Gradle — 2.1.20. Если обнаружена более старая версия Kotlin, функция горячей перезагрузки будет отключена.

Gradle

Поддержка AGP 9.0.0

Compose Multiplatform добавляет поддержку Android Gradle Plugin (AGP) версии 9.0.0. Для совместимости с новой версией AGP обновите Compose Multiplatform до версии 1.9.3 или 1.10.0.

Чтобы в дальнейшем упростить процесс обновления, рекомендуем изменить структуру проекта и использовать отдельный модуль приложения Android.

Зависимости

Библиотека

Координаты Maven

Версия Jetpack, на которой основано

Runtime

org.jetbrains.compose.runtime:runtime*:1.10.3

Runtime 1.10.5

UI

org.jetbrains.compose.ui:ui*:1.10.3

UI 1.10.5

Foundation

org.jetbrains.compose.foundation:foundation*:1.10.3

Foundation 1.10.5

Material

org.jetbrains.compose.material:material*:1.10.3

Material 1.10.5

Material3

org.jetbrains.compose.material3:material3*:1.10.0-alpha05

Material3 1.5.0-alpha08

Material3 Adaptive

org.jetbrains.compose.material3.adaptive:adaptive*:1.3.0-alpha02

Material3 Adaptive 1.3.0-alpha03

Lifecycle

org.jetbrains.androidx.lifecycle:lifecycle-*:2.10.0

Lifecycle 2.10.0

Navigation

org.jetbrains.androidx.navigation:navigation-*:2.9.2

Navigation 2.9.7

Navigation3

org.jetbrains.androidx.navigation3:navigation3-*:1.0.0-alpha06

Navigation3 1.0.0

Navigation Event

org.jetbrains.androidx.navigationevent:navigationevent-compose:1.0.1

Navigation Event 1.0.2

Savedstate

org.jetbrains.androidx.savedstate:savedstate*:1.4.0

Savedstate 1.4.0

WindowManager Core

org.jetbrains.androidx.window:window-core:1.5.1

WindowManager 1.5.1

19 марта 2026 г.
Что нового в Compose Multiplatform 1.11.1Что нового в Compose Multiplatform 1.9.3

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/whats-new-compose-110.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API