Kotlin Multiplatform (KMP)
DivKit предоставляет библиотеку для использования в приложениях Kotlin Multiplatform для платформ iOS и Android. Библиотека опубликована в Maven Central в группе com.yandex.divkit.multiplatform и версионируется в соответствии с версиями основной библиотеки DivKit.
Использование
1) Зависимость Gradle
Добавьте библиотеку как зависимость вашего общего модуля:
kotlin {
sourceSets {
commonMain.dependencies {
implementation("com.yandex.divkit.multiplatform:divkit-multiplatform:<divkit-version>")
}
}
}
2) iOS: добавьте CocoaPod DivKitKMP
Реализация для iOS использует небольшой связующий модуль DivKitKMP для корректной линковки Obj-C символов. Добавьте его в Podfile вашего iOS проекта и выполните pod install из папки iOS проекта:
platform :ios, '13.0'
use_frameworks!
target 'YourApp' do
pod 'DivKitKMP'
# Other pods if needed
end
3) Рендеринг дивной карточки в мультиплатформенном Kotlin
Вы можете создать область видимости DivKit, используя функцию DivKit, и передать в нее общие DivKitDependencies из общего кода. Внутри этой области видимости вы можете вызвать функцию DivView для рендеринга JSON и вызвать setVariables для установки переменных в глобальное хранилище.
В общем коде:
DivKit(dependencies) {
var greeting by variable(name = "greeting", value = "Hello, Username")
Column(
modifier = Modifier.padding(WindowInsets.safeDrawing.asPaddingValues()),
horizontalAlignment = Alignment.CenterHorizontally
) {
DivView(
cardId = "Sample",
jsonData = jsonString,
modifier = Modifier.wrapContentSize()
)
Button(
onClick = {
greeting = "Hello, DivKit User"
},
content = {
Text("Say \"Hello\"")
}
)
}
}
Также вы можете настроить некоторые платформо-специфичные зависимости в платформо-специфичном коде. Например:
В Android-части:
val environment = DivKitEnvironment.Builder(baseContext = this)
.imageLoaderFactory { ctx -> PicassoDivImageLoader(ctx) }
.lifecycleOwner(this)
.build()
setContent {
inject(environment) {
MainScreen()
}
}
Узнать больше
Вы можете обсуждать интересующие вас темы в сообществе пользователей DivKit в Telegram: https://t.me/divkit_community_ru.