Представление данных
От того, как в приложении устроены данные, зависит почти всё остальное: скорость работы, количество правок при изменении требований и то, насколько легко разобраться в проекте через полгода. Этот раздел — про то, чем FlutterFlow оперирует, когда речь идёт о данных.
Переменные
Переменные хранят то, что меняется по ходу работы приложения: ввод пользователя, текущее состояние экрана, данные, полученные с сервера. Без них интерфейс остался бы статичной картинкой.
Подробно о переменных и их областях видимости.
Типы данных
Тип данных определяет, что именно переменная может хранить и что с этим можно делать. Ошибка в выборе типа обычно всплывает не сразу, а на записи в базу или на разборе ответа API — поэтому лучше решать это заранее.
О примитивных и составных типах — в подробном руководстве; когда встроенных не хватает, создавайте собственный тип данных.
Изменяемость данных
Все переменные во FlutterFlow изменяемые: их значения можно менять во время работы приложения — по действию пользователя или по событию. Для неизменяемых значений есть константы: один раз задали в конструкторе — и в приложении оно уже не поменяется.
Глобальные свойства
Глобальные свойства — встроенные переменные, доступные в любом месте приложения. Создать или изменить их нельзя, они приходят от самого FlutterFlow: текущее время, платформа, размеры экрана, статус авторизации. Как ими пользоваться — в статье о предопределённых свойствах.
Инкапсуляция
Инкапсуляция — принцип из объектно-ориентированного программирования: данные и работающая с ними логика лежат вместе, а прямой доступ к внутренностям ограничен, чтобы их нельзя было случайно испортить.
Как это устроено во FlutterFlow
Визуальная среда поддерживает тот же принцип. Два примера:
-
Компоненты и кастомные виджеты. Виджет объединяет вёрстку и связанную с ней логику в одном месте.
Скажем, для профиля пользователя вы собираете компонент с фотографией, именем и кнопкой связи. Дальше он вставляется везде, где нужен профиль, а правки в вёрстке или поведении делаются в одном месте — и расходятся по всему приложению.
-
Действия на бэкенде. Логику, которую вызывают из разных мест — обработку ввода, обращение к базе, вызов внешнего API, — можно описать один раз и переиспользовать.
Так интерфейс перестаёт знать, как именно обрабатываются данные, и бизнес-логика живёт отдельно от вёрстки.
Что это даёт
- Переиспользование: собранный компонент вставляется в любое место без копирования виджетов.
- Поддержка: правка логики в блоке действий меняет поведение везде, где он вызывается, — не приходится обходить десятки экранов.
- Масштабирование: проект растёт без превращения в клубок, пока части остаются самостоятельными.