> Что такое Flutter Version Manager (FVM) (Flutter)

Уровень: junior · Роль: frontend · Категория: Технические вопросы

Компании: ТН-Групп

Стек: Flutter

> Пример ответа

Короткий ответ

FVM - это инструмент для управления несколькими версиями Flutter SDK на одной машине. Он позволяет переключаться между версиями Flutter для разных проектов, хранит SDK в изолированном каталоге и автоматически использует нужную версию на основе конфигурации проекта. Это решает проблему несовместимости проектов с разными версиями Flutter и упрощает командную работу.

Подробное объяснение

Flutter Version Manager работает по принципу, схожему с nvm для Node.js или pyenv для Python. Вместо глобальной установки Flutter SDK, FVM хранит несколько версий в отдельном каталоге (обычно ~/fvm/versions). Для каждого проекта можно указать конкретную версию Flutter в файле .fvmrc или через команду fvm use.

Основные возможности:

  • установка и удаление конкретных версий Flutter SDK
  • переключение версий глобально или per-project
  • поддержка каналов (stable, beta, dev) и конкретных версий
  • интеграция с IDE через symlink (например, fvm flutter вместо flutter)
  • автоматическое определение версии из конфигурации проекта

Ключевой trade-off: FVM добавляет слой абстракции - команды запускаются через fvm flutter вместо прямого вызова, что может замедлить первый запуск. Однако это окупается стабильностью окружения.

На практике

В реальной работе FVM особенно полезен в командах, где разные проекты используют разные версии Flutter. Например, legacy-проект может требовать Flutter 2.x, а новый - 3.x. Без FVM пришлось бы переустанавливать SDK каждый раз.

Типичный workflow:

  1. Установить FVM через brew install fvm или скрипт установки.
  2. Установить нужную версию: fvm install 3.13.0.
  3. В корне проекта выполнить fvm use 3.13.0 - создастся .fvmrc и symlink в папке .fvm.
  4. Запускать команды через fvm flutter pub get, fvm flutter run.
  5. В CI/CD использовать fvm flutter build для воспроизводимости.

Также FVM позволяет использовать разные версии для разных веток одного проекта - достаточно переключить версию в .fvmrc.

Пример кода

BASH
# Установка FVM
brew install fvm
# Установка конкретной версии Flutter
fvm install 3.13.0
# Использование версии в проекте
cd my_project
fvm use 3.13.0
# Проверка активной версии
fvm list
# Запуск команды через FVM
fvm flutter pub get
fvm flutter run
# Конфигурация .fvmrc
{
"flutter": "3.13.0"
}

Как отвечать на собеседовании

Начни с краткого определения: "FVM - это менеджер версий Flutter SDK". Затем объясни проблему, которую он решает: разные проекты требуют разные версии Flutter, и глобальная установка неудобна. Упомяни аналогии с nvm или pyenv - это покажет понимание экосистемы.

Расскажи про базовые команды: install, use, list. Подчеркни, что FVM создаёт .fvmrc - это конфиг, который можно коммитить в репозиторий, чтобы вся команда использовала одинаковую версию. Упомяни, что в CI можно использовать fvm flutter для воспроизводимых сборок.

Если спросят про ограничения - скажи, что FVM добавляет обёртку над командами, и нужно привыкнуть писать fvm flutter вместо flutter. Также можно упомянуть, что FVM не решает проблему управления зависимостями pubspec.yaml - это отдельная задача.

Что проверяет интервьюер

Интервьюер оценивает:

  • понимание проблемы версионирования SDK в командной разработке
  • знание инструментов экосистемы Flutter за пределами базового синтаксиса
  • способность объяснить trade-off между глобальной установкой и менеджером версий
  • практический опыт: знает ли кандидат команды FVM и сценарии использования

Для junior-уровня достаточно уверенного ответа на 1-2 минуты с упоминанием основных команд. Если кандидат упоминает .fvmrc и использование в CI - это сильный плюс.

Типичные ошибки

  • путать FVM с менеджером пакетов (pub) - это разные вещи
  • говорить, что FVM нужен только для переключения между stable и beta - на самом деле он управляет любыми версиями
  • не упоминать .fvmrc - это ключевая фича для командной работы
  • утверждать, что FVM автоматически подхватывается IDE без настройки - на самом деле нужно настроить symlink или указать путь в IDE
  • забывать, что команды нужно вызывать через fvm flutter, а не напрямую flutter - иначе версия не подхватится

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью