Виджет ListView используется для отображения большого количества элементов в виде прокручиваемого списка. ListView — это расширенная версия виджета Column, который автоматически обеспечивает прокрутку, когда список элементов не помещается на экране.
Вы можете использовать ListView для вертикального или горизонтального отображения списка элементов.

Добавление виджета ListView
Вот пример того, как вы можете использовать виджет ListView в своем проекте:
- Сначала перетащите виджет ListView из вкладки Layout Elements (в панели виджетов) или добавьте его непосредственно из дерева виджетов.
- Теперь вы можете добавить как можно больше виджетов Image. Снова перетащите его с вкладки Layout Elements (Элементы макета) или добавьте его непосредственно из дерева виджетов.

Чтобы создать виджет ListView с пользовательскими элементами:
- Сначала перетащите виджет ListView с вкладки Layout Elements (в панели виджетов).
- Теперь добавьте виджет Container, перетащив его с той же вкладки Layout Elements или непосредственно из дерева виджетов.
- Перетащите виджет Row внутрь добавленного Container.
- Добавьте один виджет Image внутри Row.
- Добавьте виджет Text внутри Row и установите его Theme Text Style на Title 1 в разделе Text Property в редакторе свойств. Также установите L (Left) padding равным 10.
- Добавьте виджет IconButton, щелкните на значке по умолчанию Add Box Outlined + в разделе Icon в Property Editor, затем найдите и выберите значок chevron_right_sharp.

На данный момент в список добавлен один элемент. Чтобы заполнить ListView большим количеством элементов, скопируйте-вставьте виджет контейнера. Вы также можете изменить изображение внутри виджета Image, чтобы все элементы выглядели по-разному.
Чтобы скопировать-вставить виджет контейнера:
- Выберите виджет контейнера.
- Щелкните на нем правой кнопкой мыши и выберите Копировать. Вы также можете использовать комбинацию клавиш Ctrl+C или Command+C.
- Выберите виджет ListView.
- Щелкните на нем правой кнопкой мыши и выберите Вставить. Вы также можете использовать комбинацию клавиш Ctrl+V или Command+V.

После добавления нескольких элементов ListView выглядит следующим образом:

Отображение данных бэкенда
Возможно, вы хотите показать список элементов из бэкенда. Существуют следующие источники, из которых вы можете получить данные.
- Показывать данные из Firestore
- Отображение данных из вызова API
- Отображение данных из Supabase
Отображение данных из Firestore
Чтобы показать данные из Firestore, создайте коллекцию, сделайте запрос к коллекции, а затем отобразите данные в виджете «Изображение и текст».


Отображение данных из вызова API
Возможно, вы используете собственную инфраструктуру для хранения данных вашего приложения. Данные могут быть получены с помощью вызовов API.
Предварительные условия
Прежде чем показывать данные, полученные в результате вызова API, убедитесь, что вы выполнили все упомянутые предварительные условия.
- Будьте знакомы с вызовами API.
- Добавьте вызовы API в проект FlutterFlow.
После добавления вызова API в FlutterFlow он выглядит следующим образом:

Выполнение вызова API в ListView
Вызов API позволяет получить ответ (содержащий список элементов) и показать их в ListView.
Чтобы выполнить вызов API на ListView, выполните следующие действия:
- Выберите виджет ListView в дереве виджетов или в области холста.
- Перейдите на вкладку Backend Query (в правой части экрана).
- Установите для параметра Тип запроса значение Вызов API.
- Установите Call Name (Имя вызова) на имя API, которое извлекает данные.
- Нажмите кнопку Сохранить.

Генерация динамических дочерних элементов
Генерация динамических дочерних элементов помогает вам подготовить список элементов, присутствующих в ответе API. Возвращенный результат хранится в переменной, которую вы можете использовать для заполнения ListView.
Чтобы сгенерировать динамические дочерние элементы:
- Выберите ListView в дереве виджетов или в области холста.
- Перейдите на вкладку Generate Dynamic Children (в правой части экрана).
- Введите соответствующее имя переменной.
- Установите значение Source на [apicall_name] Response (из ListView).
- Установите для параметра Response Options значение JSON Body.
- В разделе Доступные параметры нажмите на Сбросить и выберите Путь JSON.
- Внутри JSON Path введите выражение JSON для получения списка. Как получить JSON Path, смотрите здесь.
- Нажмите Сохранить.

Отображение данных в элементах пользовательского интерфейса
Чтобы показать изображение из URL, хранящегося внутри ключа JSON:
- Выберите виджет Image, перейдите на панель свойств, найдите свойство Path и нажмите на текст Set from Variable.
- Выберите элемент [имя_переменной] из списка. Это должно быть имя переменной, которое вы указали при генерации дочерних элементов из переменной.
- Установите для параметра Available Options значение JSON Path.
- Внутри JSON Path введите выражение JSON для получения URL изображения. Как получить JSON Path, смотрите здесь.
- Нажмите кнопку Подтвердить.
- Аналогичным образом выберите виджет «Текст«. Перейдите в редактор свойств и установите данные для свойства Text.

Вот как это выглядит, когда вы запускаете свое приложение:

Отображение данных из Supabase
Чтобы показать данные из Supabase, создайте таблицу, сделайте запрос к таблице Supabase, а затем отобразите данные в виджете «Изображение и текст».
Добавление бесконечной прокрутки
Бесконечная прокрутка автоматически загружает новые элементы по мере прокрутки списка вниз. Она работает, показывая сначала только ограниченное количество элементов (например, 15, 25) и загружая последующие элементы до того, как пользователь достигнет конца списка. В конце списка отображается круговая полоса прогресса по мере загрузки новых элементов.


Добавление бесконечной прокрутки помогает улучшить пользовательский опыт за счет сокращения времени ожидания (поскольку без бесконечной прокрутки загрузка длинного списка заняла бы больше времени) и загрузки новых элементов только по мере необходимости.
Бесконечная прокрутка может быть добавлена к списку элементов, полученному из двух источников:
- Бесконечная прокрутка в списке из коллекции Firestore
- Бесконечная прокрутка списка из вызова API
Бесконечная прокрутка в списке из коллекции Firestore
В FlutterFlow вы можете напрямую включить бесконечную прокрутку списка элементов, полученных из коллекции Firestore.
Чтобы включить бесконечную прокрутку:
- Запросите коллекцию в ListView (пропустите, если вы уже сделали это).
- Выберите ListView, перейдите на панель свойств и выберите раздел Backend Query.
- Прокрутите вниз уже добавленный запрос и включите опцию Enable Infinite Scroll.
- При включении бесконечной прокрутки также включается свойство Listen For Changes. Это означает, что список автоматически обновляется при внесении изменений в элемент. Это делается для поддержания актуальности всех элементов на экране. Однако при добавлении или удалении нового элемента список не обновляется. В редких случаях эту функцию необходимо отключить. Для этого отключите это свойство.
- При бесконечной прокрутке элементы загружаются частями, называемыми страницами. Количество элементов, загружаемых на одной странице, определяется свойством Page Size. По умолчанию значение установлено на 25 (т.е. загружается 25 элементов на страницу). ListView загружает первую страницу, как только она становится видимой на экране, а последующие страницы (с количеством элементов, определенным в свойстве Page Size) загружаются по мере прокрутки экрана вниз. Вы можете настроить это значение в соответствии с вашим дизайном и требованиями.
- Нажмите кнопку Сохранить.

Бесконечная прокрутка в списке из вызова API
Чтобы добавить бесконечную прокрутку при вызове API, у вас должна быть конечная точка, поддерживающая пагинацию, с хотя бы одним параметром запроса, принимающим номер страницы, например page, offset и т. д.
Переменные пагинации
Когда вы добавляете вызов API с пагинацией в конструктор и включаете бесконечную прокрутку, мы предоставляем вам следующие переменные пагинации, которые вы можете передать в ваши переменные API. Они будут доступны в меню Set Variable.

- Номер следующей страницы: Вы можете передать эту переменную для параметра запроса, который принимает номер страницы. Значение по умолчанию равно 0 и продолжает увеличиваться на единицу по мере прокрутки списка вниз, пока не достигнет конца.
- Количество загруженных элементов: Это значение равно количеству элементов, возвращенных постраничным вызовом API.
- Последний ответ: Это полезно, если вы хотите получить что-нибудь из последнего ответа, что может помочь вам получить следующий набор данных.
Добавление элементов бесконечной прокрутки:
- Добавление постраничного вызова API
- Передача переменной пагинации в запросе вызова API
Добавление постраничного вызова API
Страничный API — это API, который возвращает результат по частям. Большинство страничных API требует добавления параметров запроса, чтобы знать, сколько элементов нужно получить и с чего начать.
Например, этот вызов API https://reqres.in/api/users?per_page=20&page=1 требует параметра per_page, который указывает 20 элементов для загрузки на страницу, а параметр page указывает начать с первой страницы. Это называется постраничной пагинацией.
Посмотрите, как добавить страничный вызов API с помощью параметров запроса.
Передача переменной пагинации в запросе вызова API
Этот шаг включает в себя добавление виджета ListView -> ListTile и запрос API-вызова с пагинацией.
- Сначала выполните запрос и покажите данные из вызовов API.
- При запросе вызова API передайте значение параметра запроса из переменной pagination.

Настройка
Панель свойств можно использовать для настройки поведения виджета ListView.
Добавление отступов
Ниже приведены инструкции по добавлению отступов.
Отображение элементов по горизонтали
В приведенном выше примере вы узнали, как добавлять элементы вертикально, что является стандартной осью расположения дочерних элементов для ListView.
Чтобы показать элементы по горизонтали:
- Выберите ListView в дереве виджетов или в области холста.
- Перейдите в редактор свойств и прокрутите вниз до раздела «Свойства ListView».
- Найдите выпадающий список Axis и измените его на Horizontal.

Для корректировки расположения элементов в горизонтальном направлении:
- Оберните строку внутри колонки, щелкнув правой кнопкой мыши на строке, выберите опцию Wrap Widget и затем щелкните на колонке. Вы также можете выбрать виджет Row и нажать сочетание клавиш (⌘ + B).
- Перетащите виджет Text и IconButton за пределы Row и поместите его внутрь Column.
- Установите для виджета Text тематический стиль текста на Body Text 1.
- Перетащите виджет Row вверх и сделайте его первым дочерним элементом Column.
- Примените это ко всем элементам или просто скопируйте-вставьте измененный элемент.

Обновленный элемент для горизонтального расположения выглядит следующим образом:

Уменьшение размера ListView
По умолчанию виджет ListView занимает все доступное пространство по своей главной оси. Это означает, что если свойство Axis установлено в значение Vertical, то ListView займет все вертикальное пространство на экране.
Аналогично, если свойство Axis установлено в Horizontal, то ListView будет занимать все горизонтальное пространство.
Чтобы заставить ListView принимать размер только своих дочерних элементов:
- Выберите ListView в дереве виджетов или в области холста.
- Перейдите в редактор свойств и прокрутите вниз до раздела Свойства ListView.
- Установите флажок Shrink Wrap.
Ниже показано, как выделение зеленым цветом для ListView уменьшается, когда установлен флажок Shrink Wrap.

Включение функции «Потянуть за обновление
Чтобы включить функцию pull to refresh на этом виджете, вы можете следовать инструкциям здесь.
Включение функции «Потянуть за обновление
Чтобы включить функцию pull to refresh на этом виджете, вы можете следовать инструкциям здесь.
Отображение виджета пустого списка
Посмотрите, как отобразить виджет пустого списка при отсутствии данных.
Прокрутка к началу или концу
Узнайте, как прокрутить список к началу или концу нажатием кнопки.
Показать/скрыть виджет списка
О том, как показать/скрыть виджет, читайте здесь.