Служебные функции
Служебные функции закрывают мелкую повседневную работу: посчитать, отформатировать, склеить строки. Всё это делается прямо в конструкторе, при задании значения из переменной.
Во FlutterFlow есть две встроенные функции:
-
Combine Text — склейка строк из нескольких значений.
-
Inline Function — быстрые вычисления и преобразования данных.
Combine Text
Часто нужно показать в одном тексте сразу несколько значений. Скажем, в демонстрационном магазине цена хранится так:
"price": {
"currency": "$",
"amount": 25.50
}
По отдельности эти поля бессмысленны — в интерфейсе валюту и сумму нужно показать вместе.
Здесь и пригодится Combine Text: она доступна везде, где значение имеет тип String. Склеивать можно сколько угодно значений — динамических и статических, — даже если сами они строками не являются: результат всё равно будет строкой.
Как это выглядит:
Combine Text склеивает значения с одним общим стилем текста. Если каждой части нужен свой стиль, берите виджет RichText.
Текст, собранный через Combine Text, не попадает в таблицу языков и не переводится действием Translate All. Статический текст внутри RichTextSpan переводится.
Встроенные выражения (Inline Function)
Начиная с версии FlutterFlow 6.0 Code Expressions называются Inline Functions.
Часто данные нужно чуть поправить перед подстановкой: перевести из одного типа в другой, отформатировать, посчитать.
Встроенное выражение — это код из операторов, переменных и значений, который возвращает результат: арифметика, логика и прочие несложные вычисления.
Добавляется оно в диалоге Set from Variable, там же выбираются значения, которые войдут в выражение.
Пример: считаем скидку в 18% от цены товара. Выражение — cost - (cost * discount).
Нужно больше свободы — используйте Custom Code Expression. Это развитие встроенных выражений: доступ к ресурсам проекта без передачи их аргументами, автодополнение и проверка ошибок на лету.
Порядок операций
Действует обычный приоритет: умножение и деление раньше сложения и вычитания, скобки его меняют.
В нашем случае нужны две величины: cost и discount.
Заводим для них аргументы в диалоге Inline Function, задаём тип каждому и указываем тип результата. Здесь это double — итоговая сумма.
Само выражение пишется в поле Expression; кнопка Check Errors проверяет его и показывает сгенерированный код.
Аргументы встроенного выражения бывают таких типов:
| Тип данных | Может быть null | Может быть списком |
|---|---|---|
| String | ✅ | ✅ |
| Integer | ✅ | ✅ |
| Double | ✅ | ✅ |
| Boolean | ✅ | ✅ |
| Colors | ✅ | ✅ |
Частые примеры
| Выражение | Что делает | Пример | Результат |
|---|---|---|---|
contains() | Проверяет, есть ли подстрока в строке | text1.contains(text2) | bool |
split() | Разбивает строку на список подстрок | text.split(",") | List<String> |
toLowerCase() или toUpperCase() | Приводит строку к нижнему или верхнему регистру | text.toLowerCase() | String |
contains() | Проверяет, есть ли элемент в списке | fruits.contains("apple") | bool |
max() | Возвращает большее из двух чисел | math.max(a, b) | int |
toDouble() | Переводит целое в дробное | intValue.toDouble() | double |
int.parse(s) | Переводит строку в целое | int.parse(stringValue) | int |
Custom Code Expression
Custom Code Expression — короткий код на Dart прямо в свойствах виджета и в потоках действий. В отличие от встроенного выражения, здесь доступны сгенерированные классы FlutterFlow, глобальные переменные, свойства виджетов и параметры — передавать их аргументами не нужно.
Работает автодополнение: наберите FFAppState()., и редактор покажет доступные переменные состояния приложения вместе с их типами.
Проверка идёт по ходу набора — синтаксическая ошибка или обращение к несуществующему свойству видны сразу.
Custom Code Expression доступен на платных тарифах FlutterFlow.
- Что именно доступно внутри выражения, показано на странице частых примеров.
- Нажмите
^ + Space(илиCtrl + Space) во время набора, чтобы увидеть подсказки. - Доступны и поля собственных структур: например,
FFAppState().localDeviceInfo.osVersion, если такое поле есть в состоянии приложения. - Чтобы уверенно писать такие выражения, полезно понимать, как FlutterFlow собирает проект: посмотрите раздел Управление состоянием и другие материалы о сгенерированном коде.
Пара примеров с обращением к состоянию приложения и страницы:
-
Состояние приложения. Проверяем, включена ли тёмная тема:
FFAppState().enableDarkMode ? 'Dark Mode On' : 'Light Mode Off'Выражение читает глобальную переменную
enableDarkModeизFFAppStateи возвращает строку. -
Состояние страницы или компонента. Обращение начинается с
_model., дальше переменная выбирается из подсказок:_model.searchText.isEmpty ? '' : 'Searching for "${_model.searchText}"'Здесь проверяется, пуста ли переменная состояния страницы
searchText. Объект_model— это сгенерированная модель состояния текущей страницы.
Как добавить такое выражение:
Действие Execute Custom Code
Чтобы выполнить код в потоке действий — по нажатию кнопки или после загрузки страницы, — используйте действие Execute Custom Code.

Оно выручает, когда главная страница рано убрана из стека навигации и обычный переход по локальному контексту не срабатывает: в выражении можно обратиться к глобальному контексту навигатора.
Кастомные функции
Для вычислений посложнее и типов данных, которых нет во встроенных выражениях, есть кастомные функции.
Подробнее — Кастомные функции.
Частые вопросы
Чем Custom Code Expression отличается от Inline Function?
Это более гибкая версия встроенного выражения.
Во встроенное выражение значения нужно передавать аргументами. В Custom Code Expression можно напрямую обращаться к сгенерированным ресурсам FlutterFlow — FFAppState(), _model, контексту и прочему.
Писать можно любое корректное выражение Dart, в том числе многострочную логику через анонимные функции. Плюс автодополнение и проверка ошибок по ходу набора.