Что такое Flutter Version Manager (FVM)
Что проверяют
Умеете ли вы фиксировать окружение проекта, а не объяснять коллеге, что у вас локально всё собиралось. Flutter SDK обновляется часто, и его версия влияет на сборку так же сильно, как версии зависимостей, поэтому вопрос на самом деле про воспроизводимость.
Как отвечать
FVM ставит несколько версий Flutter SDK в общий кэш и привязывает к проекту нужную. Команда установки скачивает версию, команда выбора записывает её в файл конфигурации в корне проекта и создаёт каталог со ссылкой на SDK. Файл конфигурации коммитят, каталог со ссылкой добавляют в игнор, потому что путь у каждого свой.
После этого команды запускают через FVM, чтобы взялся нужный SDK, а редактор настраивают на путь к ссылке, иначе анализатор и отладчик продолжат работать другой версией и будут показывать ошибки, которых в сборке нет.
Отдельно стоит сказать про сборочный конвейер: на агенте ставится FVM, версия берётся из файла конфигурации, и сборка перестаёт зависеть от того, что было предустановлено на машине. И про смысл затеи: проект на стабильной версии и проект на свежей уживаются на одном ноутбуке, обновление SDK проверяется переключением и откатывается одной командой, а канал с предварительными сборками пробуют, не снося рабочий.
Где спотыкаются
Выбирают версию для проекта, а команды продолжают запускать напрямую. Собирается всё глобальным SDK, и вся настройка оказывается декоративной.
Путают, что коммитить. В репозиторий уезжает каталог со ссылкой на чужой путь или, хуже, распакованный SDK, а файл конфигурации при этом попадает в игнор, и у коллег не остаётся источника истины о версии.
Считают, что закрепление SDK закрывает вопрос воспроизводимости целиком. Версии пакетов фиксирует файл блокировки зависимостей, а ограничение версии языка в манифесте проекта должно соответствовать выбранному SDK, иначе на конвейере всё равно соберётся не то.