Пагинация
В качестве примера сделаем клавиатуру с числами от 1 до 100.
Без пагинации
Создадим состояние и спецификацию.
@Serializable
class SamplePaginationState : MessageState
val samplePagination = inState<Role, SamplePaginationState> {
val numbers = (1..100)
message {
text("Числа от 1 до 100") {
numbers.forEach { number ->
row {
actionButton(number.toString(), …)
}
}
}
}
}
С пагинацией
Реализуем пагинацию.
Сделаем так, чтобы состояние реализовывало
WithPagination.@Serializable data class SamplePaginationState( override val page: Int ) : MessageState, WithPagination<SamplePaginationState> { override fun withPage(page: Int) = copy(page = page) }Изменим спецификацию.
Теперь в блоке
messageдоступны инструменты для пагинации:- limit
количество элементов на одной странице
- offset
отступ в элементах от начала списка
- navigationRow(itemCount = …)
кнопки назад, вперёд, а также счётчик страниц
Используем их.
val samplePagination = inState<Role, SamplePaginationState> { val numbers = (1..100) message { text("Числа от 1 до 100") { numbers.drop(offset).take(limit).forEach { number -> row { actionButton(number.toString(), …) } } navigationRow(itemCount = numbers.count()) } } }
Результат

Last modified: 24 August 2023