Служебные функции

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

Во FlutterFlow есть две встроенные функции:

  • Combine Text — склейка строк из нескольких значений.

  • Inline Function — быстрые вычисления и преобразования данных.

Combine Text

Часто нужно показать в одном тексте сразу несколько значений. Скажем, в демонстрационном магазине цена хранится так:


"price": {
"currency": "$",
"amount": 25.50
}

По отдельности эти поля бессмысленны — в интерфейсе валюту и сумму нужно показать вместе.

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

Как это выглядит:

внимание
Combine Text и виджет RichText

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.

execute-custom-code.avif

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

Кастомные функции

Для вычислений посложнее и типов данных, которых нет во встроенных выражениях, есть кастомные функции.

инфо

Подробнее — Кастомные функции.

Частые вопросы

Чем Custom Code Expression отличается от Inline Function?

Это более гибкая версия встроенного выражения.

Во встроенное выражение значения нужно передавать аргументами. В Custom Code Expression можно напрямую обращаться к сгенерированным ресурсам FlutterFlow — FFAppState(), _model, контексту и прочему.

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

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

обновлено

ESC