Kotlin DSL

Kotlin DSL - это инструмент для описания пользовательских интерфейсов в формате DivKit на Kotlin.

Использование

Типичный процесс работы с библиотекой выглядит следующим образом.

  1. Описание пользовательского интерфейса в виде объекта divan. Класс Data повторяет структуру сущности div-data и имеет расширения, упрощающие работу.
val card = divan {
    data(
        // id карточки, обязательное свойство
        logId = "new-div-card",
        // Описание внешнего вида карточки.
        // В данном случае карточка состоит из одного текстового элемента.
        div = text(
            fontSize = 18,
            text = "Hello, world!"
        )
    )
}
  1. Сериализация объекта divan в JSON. В примере ниже для сериализации используется библиотека com.fasterxml.jackson.
val jsonString = JsonMapper.builder().build().writeValueAsString(card)
  1. Передача полученного JSON клиенту.

Примеры

Вычисляемые выражения в свойствах визуальных элементов

Для использования вычисляемых выражений в качестве значений свойств необходимо вызывать функцию evaluate.

val card = divan {
    data(
        logId = "new-div-card",
        // объявление переменных
        variables = listOf(
            stringVariable(
                name = "hello_text",
                value = "Hello, world!"
            )
        ),
        div = text(
            // описание константных свойств
            fontSize = 18
        ).evaluate(
            // описание вычисляемых свойств
            text = expression("@{hello_text}")
        )
    )
}

Шаблоны

// объявление ссылочного свойства "title"
val titleRef = reference<String>("title")

// объявление шаблона "title_text"
val titleTemplate = template("title_text") {
    text(
        // описание константных свойств шаблона
        fontSize = 18,
        width = wrapContentSize(),
    ) + textRefs(
        // описание ссылочных свойств шаблона
        text = titleRef
    )
}

val card = divan {
    data(
        logId = "new-div-card",
        div = container(
            orientation = vertical,
            items = listOf(
                // создание элемента из шаблона
                render(
                    titleTemplate,
                    // установка значения в ссылочное свойство шаблона
                    titleRef bind "Hello, world!"
                ) + textProps(
                    // описание/переопределение базовых свойств элемента
                    fontSize = 20
                ),
                // создание ещё одного элемента из того же шаблона
                render(
                    titleTemplate,
                    titleRef bind "Hello, DivKit!"
                )
            )
        )
    )
}

Узнать больше

Следите за новостями DivKit в Telegram-канале: http://t.me/divkit_news.

Также вы можете обсуждать интересующие вас темы в сообществе пользователей DivKit в Telegram: https://t.me/divkit_community_ru.

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

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