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.

Репозиторий DivKit

Предыдущая
Следующая