Закрепление проекта за стабильной версией
FlutterFlow обновляется постоянно: новые возможности, исправления, свежие версии Flutter и сторонних пакетов. Обратная сторона такой скорости — обновление иногда ломает то, что работало, особенно в проектах с кастомным кодом и внешними зависимостями.
На этот случай есть управление версиями: проект закрепляется за конкретным стабильным релизом и перестаёт получать обновления автоматически.
Плата за это — отсутствие новых возможностей и ошибки, которые исправят только в следующих релизах. Закрепление имеет смысл для сложных приложений с кастомным кодом и зависимостями, а не для любого проекта.
Пока закреплять проект за стабильной версией могут только пользователи тарифа Enterprise.
Когда это нужно
- Чтобы ничего не сломалось внезапно. Обновление платформы способно принести в проект ошибки — особенно если в нём есть кастомный код. Закрепление снимает этот риск.
- Чтобы обновляться в удобный момент. Обновление может прийтись на канун релиза вашего приложения. Закрепив версию, вы решаете сами, когда переходить на новую.
Как это устроено
В основе — семантическое версионирование.
Новая версия FlutterFlow выходит примерно раз в неделю, и с каждой номер версии увеличивается.
Номер состоит из трёх частей:
- Мажорная версия — существенные изменения, заметно меняющие продукт.
- Минорная версия — важные изменения в работе: переход на новую версию Flutter, серьёзные правки в генерации кода или структуре проекта, крупные новые возможности.
- Патч-версия — рядовые выпуски с исправлениями и мелкими улучшениями, не затрагивающие структуру проекта и сгенерированный код.

Текущая версия FlutterFlow видна в левом верхнем углу конструктора.

Стандартный релиз
Стандартный релиз выходит примерно раз в неделю (график может меняться).
Если проект не закреплён — а это поведение по умолчанию, — он всегда работает на последнем стандартном релизе.
Стабильный релиз
Стабильный релиз выпускается раз в месяц, если выполнено хотя бы одно условие:
- заметно изменилась генерация кода;
- обновились версия Flutter или зависимости в pubspec сгенерированных проектов;
- изменилась структура проекта — например, появился новый тип виджета.
У каждого стабильного релиза свой номер Major.Minor. Закрепить за ним можно те проекты, которые не редактировались в более новой версии Major.Minor.
Каждый стабильный релиз поддерживается 6 месяцев, после чего перейти на следующий придётся в любом случае.
Как закрепить версию
Откройте Settings and Integrations > General > App Details > Version Pinning и выберите стабильный релиз.

Изменение закреплённой версии
- Перейти на более новый стабильный релиз. Как только он выходит, он появляется в том же списке. Чем больше номер, тем новее релиз: 5.1 новее 5.0.
- Открепить проект — выбрать Latest Version, и проект вернётся на последний стандартный релиз.
- Подписаться на следующий стабильный. Бывает, что вашей стандартной версии не соответствует ни один стабильный релиз: вы на 5.0.1, а стабильной станет 5.0.4. Тогда выберите Next Stable Version — проект закрепится за ней, как только она выйдет.
Открепление проекта и переход на более новую версию необратимы. Если вы не уверены в совместимости, создайте ветку и смените версию сначала в ней — так изменения можно посмотреть, не трогая основной проект.
Где работать с закреплённой версией
Проект, закреплённый за версией, редактируется только в этой версии FlutterFlow.
- В браузере: при открытии проекта с панели управления вас автоматически перенаправят на адрес нужной версии.
- В десктопном приложении: понадобится установить отдельную сборку под этот стабильный релиз. Такие сборки не обновляются сами — при переходе на новую версию установите новую.
Как обновляться
Если приложение сложное, а кастомный код завязан на конкретные версии пакетов, придерживайтесь такого порядка.
- Закрепите проект за доступным стабильным релизом, если он есть.
- Когда выйдет новый стабильный релиз, решите, когда переходить: удобнее делать это не в разгар работы над функциональностью, а сначала посмотреть, что в нём появилось.
- Готовы обновляться — зафиксируйте все изменения в главной ветке. Создайте от неё новую ветку, смените закреплённую версию и проверьте всё, что может сломаться. Правки вносите в этой же ветке.
- Запустите приложение на всех платформах, которые поддерживаете, — на симуляторе, эмуляторе или живом устройстве. Подробности — в разделе о локальном запуске.
- Если всё в порядке, влейте ветку в главную. Для слияния обе ветки должны быть закреплены за одной и той же версией FlutterFlow. Если что-то работает не так, оставьте ветку до тех пор, пока не разберётесь с зависимостями и кастомным кодом.
Как обновлять зависимости, показано в видео.
Версии и библиотеки
У библиотек свои версии. Как и проект, библиотека работает в версиях FlutterFlow не ниже той, в которой её редактировали последний раз.
Чтобы всё сходилось, закрепляйте библиотеки закреплённого проекта за той же версией FlutterFlow, что и сам проект, или за более ранней.
Библиотечный проект тоже можно закрепить — тогда все его версии останутся на выбранном релизе, пока вы не решите иначе.
-
В закреплённый проект нельзя добавить библиотеку с версией
currentили версию, которую редактировали в более позднем релизе FlutterFlow. -
Проект нельзя закрепить, если в нём есть библиотека с версией
currentили версия, отредактированная в более позднем релизе.
Версия подключаемой библиотеки должна быть не выше версии проекта, куда её подключают, иначе будет ошибка.
Частые вопросы
Можно ли редактировать проект в разных версиях FlutterFlow?
Нет. Незакреплённый проект всегда открывается в последнем релизе. Закреплённый — только в той версии, за которой закреплён.
Как часто выходят стабильные версии?
Примерно раз в месяц.
Где посмотреть, что вошло в стабильную версию?
Заметки о выпуске готовятся к показу прямо в продукте — тогда состав каждой стабильной версии будет виден на месте.
Что делать, если в моей версии обнаружилась ошибка?
Для критических ошибок выпускаются исправления и для прежних версий. Но часть исправлений требует обновления самого Flutter или зависимостей, а это для старых версий возможно не всегда. В этом и состоит риск того, чтобы оставаться на старом релизе.
Можно ли закрепить разные версии за разными ветками?
Да. Рекомендуемый порядок такой: создать ветку, обновить в ней версию, внести нужные правки и убедиться, что всё работает, — и только потом вливать её в главную.
Для слияния обе ветки должны быть закреплены за одной и той же версией FlutterFlow.
Что делать, если подходящей стабильной версии нет?
Если проект создавался и редактировался на стандартном релизе, которому не соответствует ни один стабильный, в списке может не быть ни одного варианта. Тогда выберите следующий стабильный релиз — проект закрепится за ним сразу, как только он выйдет.
Как быть, если проектов и библиотек несколько?
Закрепляйте их за одной и той же версией и обновляйте примерно одновременно. Так проще держать совместимость между проектами и библиотеками, которые зависят друг от друга, и работать в одной десктопной сборке FlutterFlow.