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