FlutterJuniorTechnical
Что такое pubspec.yaml и как управлять зависимостями во Flutter?
pubspec.yaml — манифест Flutter-проекта: описывает метаданные, зависимости (^semver), ресурсы и шрифты. Команды flutter pub add/get/upgrade управляют пакетами; pubspec.lock фиксирует точные версии.
pubspec.yaml во Flutter
pubspec.yaml — манифест Flutter/Dart-проекта. Описывает метаданные пакета, зависимости, ресурсы и настройки Flutter. Это аналог package.json в Node.js или pyproject.toml в Python.
Структура файла
name: my_app
description: Мобильное приложение для задач.
publish_to: none # не публиковать на pub.dev
version: 1.2.3+5 # semver + build number (используется в магазинах)
environment:
sdk: '>=3.0.0 <4.0.0' # ограничение версии Dart SDK
dependencies:
flutter:
sdk: flutter
http: ^1.2.0 # любая совместимая версия >= 1.2.0 < 2.0.0
go_router: ^14.0.0
shared_preferences: ^2.3.0
intl: ^0.19.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^4.0.0
mockito: ^5.4.0
build_runner: ^2.4.0
flutter:
uses-material-design: true
assets:
- assets/images/
- assets/icons/logo.png
- assets/translations/en.json
fonts:
- family: Rubik
fonts:
- asset: assets/fonts/Rubik-Regular.ttf
- asset: assets/fonts/Rubik-Bold.ttf
weight: 700
Версионирование зависимостей
Dart использует семантическое версионирование с несколькими форматами ограничений:
^1.2.0— caret: от 1.2.0 до <2.0.0 (рекомендуется)'>=1.2.0 <2.0.0'— явный диапазон1.2.0— точная версия (жёсткая блокировка)any— любая версия (не рекомендуется в production)
Добавление пакета
# Через CLI (рекомендуется)
flutter pub add http
flutter pub add --dev mockito build_runner
# Обновление до последних совместимых версий
flutter pub upgrade
# Обновление с нарушением ограничений (мажорная версия)
flutter pub upgrade --major-versions
# Получение зависимостей после ручного редактирования pubspec.yaml
flutter pub get
Локальные и git-зависимости
dependencies:
# Локальный пакет (монорепо или разработка)
my_utils:
path: ../my_utils
# Git-репозиторий
some_package:
git:
url: https://github.com/example/some_package.git
ref: main # ветка, тег или SHA
# Конкретная папка в git-репозитории
another_package:
git:
url: https://github.com/example/mono.git
path: packages/another_package
pubspec.lock
После flutter pub get создаётся pubspec.lock — фиксирует точные версии всех транзитивных зависимостей. Для приложений файл нужно коммитить в git. Для библиотек — добавлять в .gitignore.
Подводные камни
- YAML чувствителен к отступам — используйте 2 пробела, никогда табы; один неверный отступ ломает весь файл.
- Версия приложения в формате
1.2.3+5: число после+— этоversionCodeна Android иCFBundleVersionна iOS; его нужно увеличивать при каждой публикации. - Конфликт версий (
version solving failed) возникает, когда два пакета требуют несовместимые версии одной зависимости — решайте черезdependency_overrides(временный workaround, не рекомендуется в production). - Пути в разделе
assetsчувствительны к регистру на Linux/Mac и нечувствительны на Windows — тестируйте на целевой ОС. - Добавление пути к директории (
assets/images/) включает только файлы первого уровня, не рекурсивно. - После изменения
pubspec.yamlвручную всегда запускайтеflutter pub get— IDE не всегда делает это автоматически. dev_dependenciesне входят в production-сборку, но если ошибочно поместить инструмент сборки (например,build_runner) вdependencies— он попадёт в финальный бинарник.
Common mistakes
- Сводить «
pubspec.yamlи как управлять зависимостями во Flutter» к синтаксису и не объяснять platform channel. - Игнорировать жизненный цикл, основной поток или момент освобождения ресурсов в сценарии flutter-19.
- Выбирать API по привычке, не проверяя состояние, ошибки, доступность и платформенные ограничения.
What the interviewer is testing
- Формулирует точную модель для «
pubspec.yamlи как управлять зависимостями во Flutter» и подтверждает ее корректным примером. - Умеет связать ответ с widget tree, тестированием и отладкой на устройстве.
- Называет ограничения подхода flutter-19, включая производительность, память и сопровождение.