App State

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

app-state-variables.avif

Признак, по которому выбирают App State: одни и те же данные читаются и меняются из разных мест. Корзина в магазине — типичный случай: товары нужны и на странице каталога, и на экране оформления заказа.

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

Переменные App State

Разберём работу с App State на примере корзины в магазине.

Создание переменной

Переменные создаются из левого меню навигации.

Свойства переменной

  • isList — поле является списком (например, список строк или список объектов собственного типа).
  • Persisted — значение сохраняется на устройство и восстанавливается при следующем запуске. Без этого флага переменная обнуляется при перезапуске приложения.
совет
Сгенерированный код

Что именно происходит при включённом Persisted, разобрано в руководстве по сгенерированному коду.

Использование

Созданная переменная появляется в меню Set from Variable. Например, на странице корзины по ней можно пройтись циклом и вывести каждый товар.

access-app-state-variable.avif

Действие Update App State

Изменить App State можно из панели действий в любом месте приложения — по нажатию на виджет страницы или компонента, а также из кастомного кода.

При обновлении через редактор действий доступны следующие настройки. update-app-state-action.png

Тип перестроения

Определяет, что перерисуется после изменения переменной.

  • Rebuild All Pages — перестроить все страницы приложения.
  • Rebuild Current Page — перестроить только текущую страницу.
  • No Rebuild — не перестраивать ничего.
совет
Сгенерированный код

Как изменения состояния обрабатываются внутри при каждом варианте Update Type, показано в руководстве по FFAppState.

Ниже — короткий пример: к кнопке «Add to Bag» добавляется действие, которое кладёт данные товара в список корзины.

совет

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

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

Почему в App State доступны не все типы переменных?

Некоторые типы — например, Firestore Documents и Supabase Row — можно использовать в Page State и Component State, но не в App State. Причина в том, что переменные App State глобальны и живут в памяти всё время работы приложения, а с включённым Persisted ещё и записываются в локальное хранилище устройства.

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

Если такие данные всё же нужны, держите их в состоянии страницы или компонента.

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

обновлено

ESC