Переменные

Переменные хранят данные, которые меняются во время работы приложения. Через них принимается ввод пользователя, отслеживается состояние экрана и передаются значения между частями приложения.

variable

Переменные во FlutterFlow делятся на две группы:

  • Локальные — живут внутри конкретной страницы или компонента. Переменные Page State и Component State видны только там, где созданы.
  • Глобальные — доступны во всём приложении. Так работают переменные App State: к ним можно обратиться с любой страницы.
инфо
Что такое область видимости

Область видимости определяется тем, где переменная создана. Созданная на уровне приложения доступна везде; созданная на уровне страницы — только на этой странице. Правило простое, но именно из-за него чаще всего и не находят «пропавшую» переменную.

Создание переменных

При создании переменной задаются четыре вещи: имя, тип данных, допустимость null и начальное значение. Сам порядок действий отличается для App State, Page State и Component State — ссылки на пошаговые инструкции собраны ниже.

Имя

Имя должно говорить, что внутри: по нему вы будете обращаться к переменной по всему проекту.

совет
Рекомендуемая конвенция

Для переменных используйте lowerCamelCase. Остальные соглашения об именовании во FlutterFlow и Flutter-проектах собраны в отдельном руководстве: имена переменных и функций.

Тип данных

Дальше выбирается тип: Text, Integer, Boolean и другие. Что бывает и чем отличается — в руководстве по типам данных.

Тип определяет, что переменная может хранить и как её потом использовать, поэтому менять его на ходу дороже, чем выбрать сразу верно.

Свойство Is List

Переключатель Is List превращает поле в список.

инфо
Пример

Если выбран тип String и включён Is List, FlutterFlow создаст список строк — например, перечень городов.

Nullable и начальное значение

Переменная может быть nullable или non-nullable: это определяет, вправе ли она существовать вовсе без значения. Рядом задаётся начальное значение — то, с чем переменная появляется на свет.

variables-null-initial-value.png

  • Nullable — переменная может быть пустой (null) и получить значение позже. Если выключено, значение должно быть всегда, поэтому начальное придётся указать.

  • Initial Value — для non-nullable переменной обязательно, для nullable необязательно: такая переменная просто остаётся пустой, пока в неё что-нибудь не запишут.

совет
Что такое null

Null — это отсутствие значения, и оно нередко полезнее пустой строки или нуля:

  • Ввод пользователя. До того как человек что-то ввёл, переменная пуста — и это честно отражает положение дел.
  • Условная логика. Необязательная настройка может быть не задана вовсе; null позволяет отличить «не выбрано» от «выбрано пустое».
  • Загрузка. Пока данные с API не пришли, переменная равна null — по этому признаку легко отличить состояние «грузится» от «загружено».

Пошаговые инструкции

Как создаются переменные каждого вида:

Меню Set Variable

Меню Set from Variable (оно же Set Variable) — это место, где значение виджета связывается с данными. Выбирая здесь переменную, вы говорите FlutterFlow: подставь сюда её значение — в текст, в видимость, в стиль.

Источники в этом меню разные: данные текущей страницы или компонента, глобальные свойства приложения, константы и другие. От выбора источника и зависит, откуда виджет возьмёт значение.

set-variable-menu3.png

Преобразование значений

Значение необязательно подставлять как есть — в том же меню его можно преобразовать перед тем, как отдать виджету или другой переменной.

Например:

Так данные попадают в интерфейс уже в том виде, в каком их нужно показать, без промежуточных переменных и лишних действий.

Операции над списками

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

Map List Items

Map List Items собирает список значений одного поля из списка объектов — документов, собственных типов данных или JSON. Например, из списка документов Firebase с полями name, age и position можно получить список одних только имён.

Ниже — пример: из документов Firebase (с полями name, age и breed) собирается список кличек котов и выводится в выпадающем списке.

Filter List Items

Filter List Items оставляет в списке только те элементы, которые подходят под условие: пользователи старше определённого возраста, товары в заданном ценовом диапазоне.

First Few Items

First Few Items берёт заданное количество элементов с начала списка.

first-few-items.png

Sort List Items

Списки простых типов — чисел и строк — FlutterFlow сортирует сам: у них есть естественный порядок (1, 2, 3…, «apple», «banana», «cherry»). Для такого списка достаточно указать Sort Key — сам элемент.

Пример: случайные имена выстраиваются по алфавиту.

инфо
Как отсортировать в обратном порядке

Сначала отсортируйте список обычным способом, а затем включите у ListView опцию reverse — получится порядок по убыванию.

Для списков с собственными типами данных в Sort Key нужно указать поле, по которому сортировать; тип этого поля должен быть простым, с понятным порядком.

Вот как вывести список объектов типа Product, отсортированный по цене.

Unique List Items

Оставляет в списке только неповторяющиеся значения: категории товаров, имена клиентов.

Пример — список пород котов без повторов:

Чтобы получить уникальные значения из списка собственного типа данных, сначала соберите список нужного поля через Map List Items — например, из списка Products получите список названий, — и уже из него берите уникальные.

Number of Items

Возвращает количество элементов в списке.

Item at Index

Item at Index достаёт элемент по его позиции: третье имя в списке клиентов, пятый товар в каталоге. Пригодится, когда порядок важен сам по себе — например, нужна последняя запись в журнале, — или когда проще взять элемент напрямую, чем фильтровать весь список.

Is Set and Not Empty

Is Set And Not Empty отвечает на вопрос, есть ли в списке хоть что-нибудь. Так проверяют, вернул ли поиск результаты и записались ли собранные данные.

Изменение значений

Значения переменных меняются действиями: по нажатию кнопки, по изменению поля формы, по любому другому событию.

Пошаговые инструкции по каждому виду переменных:

перевод официальной документации FlutterFlow

обновлено

ESC