Собственные типы данных
Собственный тип данных — это описание структуры: какие поля в ней есть и какого они типа. Вместо трёх отдельных переменных вы получаете один осмысленный объект.
Например, тип «Book» объединяет строку с названием, целое число с годом издания и список строк с авторами.
Что это даёт:
- Переиспользование: описали один раз — применяете везде.
- Простые правки: структура меняется в одном месте и расходится по всему приложению.
- Единообразие: данные везде выглядят одинаково.
- Меньше ошибок: сложные данные перестают разъезжаться по случайным переменным.
- Собственный тип нужен там, где встроенных — integer, string и прочих — уже не хватает.
- У FlutterFlow есть и набор встроенных типов данных.
:::

Внутри собственный тип превращается в структуру (struct) — составной тип, объединяющий поля разных типов в одну сущность.
:::info
Имя класса получается из имени типа с приставкой «Struct» в конце: тип «Cart» превращается в класс CartStruct.
Создание типа данных
При создании укажите имя типа и его поля. У каждого поля свой тип данных, а переключатель Is List делает поле списком.
Собственные типы данных называйте в UpperCamelCase — так рекомендует Dart Style Guide. Подробнее — в руководстве Имена переменных и функций.
Работа с экземплярами
Созданный тип данных внутри становится классом Dart. Само по себе описание типа данных не содержит — чтобы работать с конкретным профилем пользователя или отзывом, нужен экземпляр.
Экземпляр позволяет:
- задать значения полям;
- сохранить объект в состоянии приложения, страницы или компонента и передать его между виджетами;
- обращаться к отдельным полям там, где они нужны.
Порядок такой: сначала создайте переменную состояния типа Data Type, затем откройте диалог Set from Variable и выберите Create Data Type Object > Project Data Type. Укажите нужный тип и заполните обязательные поля.
Собственный тип в кастомном коде
Собственный тип доступен и в кастомном коде: редактор умеет принимать такое значение на вход и возвращать его же на выходе. Данные можно обработать, пересчитать или проверить, а результат вернуть в том же типе.

Пример: разбор ответа API
Допустим, API возвращает данные о товаре. Опишите тип «Product» по структуре ответа и сопоставьте поля JSON с полями типа.
Ответ выглядит так:
{
"id": "a1b2c3d4e5f678901234567",
"name": "Jacket",
"price": 199.99,
"reviews": [
{
"id": "rev101",
"username": "mike",
"rating": 4,
"comment": "This product exceeded my expectations in every way. Highly recommended!",
},
{
"id": "rev102",
"username": "kera",
"rating": 2,
"comment": "Great quality, but the color was not as shown in the picture.",
}
],
}
А сопоставление полей — так:
