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.

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

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