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 фабрику с помощью функции makeDivKitFactory и передать в неё общие зависимости DivKitDependencies из общего кода. DivKitFactory — основной интерфейс для взаимодействия.
В общем коде:
val factory: DivKitFactory = makeDivKitFactory(
dependencies = DivKitDependencies(
actionHandler = object : ActionHandler {
override fun handle(url: String) {
// Handle actions (deeplink/URL)
}
},
errorReporter = object : ErrorReporter {
override fun report(cardId: String, message: String) {
// Report parsing/rendering errors
}
}
)
)
@Composable
fun DivScreen(cardId: String, json: String, modifier: Modifier = Modifier) {
factory.DivView(cardId = cardId, jsonData = json, modifier = modifier)
}
fun setVariables() {
factory.setGlobalVariables(
mapOf(
"user_name" to "Alex",
"is_premium" to true
)
)
}
Также вы можете настроить некоторые платформо-специфичные зависимости в платформо-специфичном коде. Например:
В Android-части:
DivKitAndroidEnvironment.set(
DivKitEnvironment(
imageLoaderFactory = { ctx ->
PicassoDivImageLoader(ctx)
},
lifecycleOwner = null
)
)
Узнать больше
Вы можете обсуждать интересующие вас темы в сообществе пользователей DivKit в Telegram: https://t.me/divkit_community_ru.