Изменение проекта
Давайте изменим код, созданный мастером Kotlin Multiplatform, и отобразим текущую дату в компонуемой функции App. Для этого добавим в проект новую зависимость, улучшим пользовательский интерфейс и повторно запустим приложение на каждой платформе.
Добавление новой зависимости
Получить дату можно с помощью платформенных библиотек и ожидаемых и фактических объявлений. Однако мы рекомендуем использовать этот подход только в том случае, если библиотеки Kotlin Multiplatform нет. В этом случае можно воспользоваться библиотекой kotlinx-datetime.
Чтобы использовать библиотеку kotlinx-datetime:
-
Откройте файл
gradle/libs.versions.tomlи добавьте зависимостьkotlinx-datetimeв каталог версий:[versions] kotlinx-datetime = "0.8.0" [libraries] kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" } -
Откройте файл
shared/build.gradle.ktsи добавьте ссылку на запись этой библиотеки в раздел, где настраивается исходный набор общего кода:kotlin { // ... sourceSets { // ... commonMain.dependencies { // ... implementation(libs.kotlinx.datetime) } } } -
Для веб-цели поддержка часовых поясов требует библиотеки
js-joda. Добавьте ссылку на npm-пакетjs-jodaвwebApp/build.gradle.kts file:kotlin { // ... sourceSets { // ... commonMain.dependencies { // ... implementation(npm("@js-joda/timezone", "2.25.1")) } } }Добавление зависимости в исходный набор
webMainделает библиотеку доступной как для целейwasmJs, так иjs. После добавления зависимости примите предложение IDE синхронизировать конфигурацию Gradle или дважды нажмите Shift и выполните команду Sync Project with Gradle Files.
-
В окне инструментов Terminal выполните следующую команду, чтобы убедиться, что файл
yarn.lockобновлен и содержит последние версии зависимостей:./gradlew kotlinUpgradeYarnLock kotlinWasmUpgradeYarnLock
-
В файле
webApp/src/webMain/kotlin/.../main.ktиспользуйте аннотацию@JsModule, чтобы импортировать npm-пакетjs-joda:import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.window.ComposeViewport import kotlin.js.ExperimentalWasmJsInterop import kotlin.js.JsModule @OptIn(ExperimentalWasmJsInterop::class) @JsModule("@js-joda/timezone") external object JsJodaTimeZoneModule private val jsJodaTz = JsJodaTimeZoneModule @OptIn(ExperimentalComposeUiApi::class) fun main() { ComposeViewport { App() } }
Улучшение пользовательского интерфейса
-
Откройте файл
shared/src/commonMain/kotlin/App.ktи после компонуемой функцииApp()добавьте следующую функцию, которая возвращает строку с текущей датой:fun todaysDate(): String { fun LocalDateTime.format() = toString().substringBefore('T') val now = Clock.System.now() val zone = TimeZone.currentSystemDefault() return now.toLocalDateTime(zone).format() } -
Добавьте импорты, предложенные IDE.
Убедитесь, что импортируете класс
Clockизkotlin.time, а не изkotlinx.datetime. -
В том же файле измените компонуемую функцию
App(), добавив компонуемую функциюText(), которая вызывает эту функцию и отображает результат:@Composable @Preview fun App() { MaterialTheme { var showContent by remember { mutableStateOf(false) } val greeting = remember { Greeting().greet() } Column( modifier = Modifier .safeContentPadding() .fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally ) { Text( text = "Today's date is ${todaysDate()}", modifier = Modifier.padding(20.dp), fontSize = 24.sp, textAlign = TextAlign.Center ) Button(onClick = { showContent = !showContent }) { Text("Click me!") } AnimatedVisibility(showContent) { Column(Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) { Image(painterResource(Res.drawable.compose_multiplatform), null) Text("Compose: $greeting") } } } } } -
Следуйте рекомендациям IDE, чтобы импортировать отсутствующие зависимости.
Повторный запуск приложения
Теперь вы можете повторно запустить приложение с помощью тех же конфигураций запуска для Android, iOS, настольных систем и веб-платформы:



Следующий шаг
В следующей части руководства вы познакомитесь с новыми концепциями Compose Multiplatform и создадите собственное приложение с нуля.
Получить помощь
Kotlin Slack. Получите приглашение и присоединитесь к каналу #multiplatform.
Трекер задач Kotlin. Сообщите о новой проблеме.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/compose-multiplatform-modify-project.html