tgbotapi-framework Help

Пагинация

В качестве примера сделаем клавиатуру с числами от 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(), …) } } } } }

С пагинацией

Реализуем пагинацию.

  1. Сделаем так, чтобы состояние реализовывало WithPagination.

    @Serializable data class SamplePaginationState( override val page: Int ) : MessageState, WithPagination<SamplePaginationState> { override fun withPage(page: Int) = copy(page = page) }
  2. Изменим спецификацию.

    Теперь в блоке 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