Среды разработки
Среды разработки позволяют держать в одном проекте несколько конфигураций — Development, Staging, Production — и у каждой свои значения и свою базу. Так приложение на разных стадиях работы смотрит в разные бэкенды, а боевые данные остаются нетронутыми.
В новом проекте FlutterFlow есть одна среда — Production.
- Dev — разработка и проверка новых функций, не задевая боевые данные.
- Staging — репетиция боевой среды перед выкаткой, тоже в изоляции от неё.
Это распространённая практика, но названия сред вы задаёте сами — под свой процесс.
Создание и переключение сред
Среды создаются и переключаются на странице Dev Environments в App Settings. Текущая среда всегда видна в левом верхнем углу проекта.
Выбранная среда определяет, какой код FlutterFlow сгенерирует при запуске, тестировании, выкатке и выгрузке. Отличаются между средами только проект Firebase или Supabase и переменные из значений среды.
Значения среды
Значения среды подставляются в код приложения в зависимости от того, какая среда выбрана.
Например, в интернет-магазине значение apiUrl может указывать на разные адреса API для Development, Staging и Production. Новые функции проверяются на тестовом API, а боевые заказы идут своим путём.
Как использовать значение среды
Разберём на примере apiUrl:
При переключении среды FlutterFlow генерирует код именно под неё — для сессий Test и Run Mode, Local Run, выгрузки кода и выкатки. Ошибки проекта в разных средах тоже могут отличаться.
В сгенерированном коде появляются:
environment.json— значения среды, заданные в FlutterFlow;- класс
FFDevEnvironmentValues— синглтон с инициализацией и геттерами для этих значений. Обращаться к ним можно и из собственного кода, см. примеры собственного кода.
Приватные значения среды
Значение можно пометить приватным, если оно содержит то, чему не место в клиентском коде.
Приватные значения не попадают в скомпилированное приложение и не видны пользователям. Но если приватное значение используется в приватном вызове API, который идёт через сгенерированную облачную функцию, оно окажется в коде этой функции. При выгрузке кода или отправке проекта в GitHub такие файлы нужно просматривать и, если в них есть секреты, исключать через .gitignore.
Пока приватное значение можно использовать только как переменную в приватном вызове API. Такой вызов идёт через облачную функцию, поэтому в запросах самого приложения значение не появляется.
Приватных значений нет ни в environment.json, ни в геттерах класса FFDevEnvironmentValues.
Firebase и Supabase для каждой среды
У каждой среды проекта может быть свой проект Firebase или Supabase. Development, Staging и Production не пересекаются между собой, и данные каждой стадии живут отдельно.

Пока для среды не настроен Firebase или Supabase, тестировать приложение в ней нельзя. На остальные среды это не влияет: переключитесь обратно на Production и продолжайте работать, пока настройка новой среды не закончена.
Firebase
Для каждой среды нужен отдельный проект в консоли Firebase. Переключите среду на странице настроек Firebase и пройдите ручное подключение проекта Firebase для каждой из них.

Кроме того, для новой среды придётся вручную завести правила Firestore и коллекции.
Данные, добавленные через Content Manager, относятся к тому проекту Firebase и к той среде, которые выбраны в этот момент.
Supabase
Для каждой среды нужен отдельный проект Supabase.
Заведите значения среды вроде SupabaseAPIURL и SupabaseAnonKey и укажите их в настройках Supabase. Выглядит это так:
Схемы в разных средах Supabase лучше держать одинаковыми. Начинать удобно с Get Schema из боевой среды.
Частые вопросы
Как перенести код из одной среды в другую?
Никак — и это не задача сред. Development Environments нужны для того, чтобы подключать разные бэкенды, а не для переноса изменений.
Новые функции разрабатывают через ветки: работаете в отдельной ветке с выбранной средой разработки, проверяете, вливаете ветку в main и переключаетесь на Production.
Используются ли под капотом flavors из Flutter?
Нет. FlutterFlow генерирует код под выбранную среду — для сессий Test и Run Mode, Local Run, выгрузки кода и выкатки.
Как выкатывать приложение для разных сред?
Настройки выкатки задаются для каждой среды отдельно на странице публикации: для мобильных — своё имя пакета, для веба — свой адрес сайта. Дальше выкатка обычная. Подробности — на отдельной странице.