← Назад к вопросам

Как устроен pubspec.yaml?

1.0 Junior🔥 201 комментариев
#Другое

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Структура pubspec.yaml в Flutter

pubspec.yaml — это конфигурационный файл, в котором описываются зависимости проекта, метаданные и конфигурация Flutter приложения. Это аналог package.json в Node.js или build.gradle в Android.

Базовая структура

name: my_flutter_app
description: A new Flutter project.
publish_to: 'none'

version: 1.0.0+1

environment:
  sdk: '>=3.0.0 <4.0.0'

dependencies:
  flutter:
    sdk: flutter
  provider: ^6.0.0
  http: ^1.1.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^3.0.0

flutter:
  uses-material-design: true
  assets:
    - assets/images/
  fonts:
    - family: Roboto
      fonts:
        - asset: assets/fonts/Roboto-Regular.ttf

Разделы pubspec.yaml

1. Метаинформация проекта

name — название пакета (используется для импорта в других проектах)

name: awesome_package
# Позже в других проектах: import 'package:awesome_package/main.dart';

description — описание проекта

description: A Flutter application for user authentication.

publish_to — где публиковать пакет (по умолчанию pub.dev)

publish_to: 'none'  # Не публиковать
# или
publish_to: 'https://pub.dev'  # На pub.dev

version — версия приложения

version: 1.0.0+1
# Format: major.minor.patch+build
# 1.0.0 — версия для пользователя
# +1 — build number (используется для App Store / Play Store)

2. Environment

Указывает совместимость с версиями Dart/Flutter

environment:
  sdk: '>=3.0.0 <4.0.0'  # Dart SDK версия
  flutter: '>=3.10.0'    # Flutter версия (опционально)

Почему это важно:

  • Гарантирует, что код будет работать на совместимых версиях
  • Pub.dev проверяет совместимость при установке пакета

3. Dependencies

Основные зависимости, необходимые для работы приложения

dependencies:
  flutter:
    sdk: flutter          # Flutter SDK (всегда нужен)
  
  # HTTP запросы
  http: ^1.1.0
  dio: ^5.0.0
  
  # State management
  provider: ^6.0.0
  riverpod: ^2.0.0
  get: ^4.6.0
  
  # JSON сериализация
  json_serializable: ^6.0.0
  
  # База данных
  sqflite: ^2.3.0
  hive: ^2.2.0
  
  # Local storage
  shared_preferences: ^2.0.0
  
  # UI компоненты
  intl: ^0.18.0        # Интернационализация
  cached_network_image: ^3.3.0
  flutter_spinkit: ^5.2.0

Версионирование зависимостей:

# Exact version
http: 1.1.0

# Any version compatible with 1.1.0
http: ^1.1.0       # >= 1.1.0 < 2.0.0

# Allow patch updates
http: ~1.1.0       # >= 1.1.0 < 1.2.0

# Range
http: '>=1.1.0 <2.0.0'

# Any version
http: any

4. Dev Dependencies

Зависимости, которые нужны только для разработки (не попадают в финальное приложение)

dev_dependencies:
  # Flutter testing
  flutter_test:
    sdk: flutter
  
  # Linting
  flutter_lints: ^3.0.0
  
  # Code generation
  build_runner: ^2.4.0
  json_serializable: ^6.0.0
  
  # Testing
  mockito: ^5.4.0
  test: ^1.24.0

5. Flutter конфигурация

flutter:
  # Material Design
  uses-material-design: true
  
  # Assets (картинки, данные)
  assets:
    - assets/images/
    - assets/images/icons/
    - assets/data.json
  
  # Шрифты
  fonts:
    - family: Roboto
      fonts:
        - asset: assets/fonts/Roboto-Regular.ttf
        - asset: assets/fonts/Roboto-Bold.ttf
          weight: 700
        - asset: assets/fonts/Roboto-Italic.ttf
          style: italic
    
    - family: CustomFont
      fonts:
        - asset: assets/fonts/CustomFont.ttf
  
  # Иконки (Material Icons)
  # Flutter автоматически включает Material Icons

Полный пример pubspec.yaml

name: ecommerce_app
description: E-commerce Flutter application with Provider state management.
publish_to: 'none'

version: 2.1.0+5

environment:
  sdk: '>=3.1.0 <4.0.0'
  flutter: '>=3.13.0'

dependencies:
  flutter:
    sdk: flutter
  
  # HTTP Client
  http: ^1.1.0
  
  # State Management
  provider: ^6.0.0
  
  # Database
  sqflite: ^2.3.0
  
  # JSON
  json_serializable: ^6.7.0
  
  # Async & Utilities
  async: ^2.11.0
  intl: ^0.18.0
  uuid: ^3.0.0
  
  # Navigation
  go_router: ^10.0.0
  
  # Local Storage
  shared_preferences: ^2.2.0
  
  # UI/UX
  cached_network_image: ^3.3.0
  flutter_spinkit: ^5.2.0
  smooth_page_indicator: ^1.1.0
  
  # Payment
  stripe_flutter: ^10.0.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  
  flutter_lints: ^3.0.0
  build_runner: ^2.4.0
  json_serializable: ^6.7.0
  mockito: ^5.4.0

flutter:
  uses-material-design: true
  
  assets:
    - assets/images/
    - assets/images/banners/
    - assets/data/categories.json
  
  fonts:
    - family: Poppins
      fonts:
        - asset: assets/fonts/Poppins-Regular.ttf
        - asset: assets/fonts/Poppins-Bold.ttf
          weight: 700
        - asset: assets/fonts/Poppins-SemiBold.ttf
          weight: 600

Как Flutter использует pubspec.yaml

  1. flutter pub get — скачивает зависимости

    flutter pub get
    # Скачивает пакеты в .pub-cache/ и создаёт pubspec.lock
    
  2. pubspec.lock — lock-файл (автоматически создаётся)

    # Хранит точные версии установленных пакетов
    http:
      dependency: "direct main"
      description:
        name: http
        url: "https://pub.dev"
      source: hosted
      version: "1.1.0"
    
  3. Assets — автоматически включаются в build

    // Использование
    Image.asset('assets/images/logo.png')
    
  4. Fonts — становятся доступны для использования

    TextStyle(fontFamily: 'Poppins', fontSize: 16)
    

Лучшие практики

1. Точная версионирование в production

# ❌ Плохо (слишком широкий диапазон)
dependencies:
  http: '>=1.0.0'

# ✅ Хорошо (уточненный диапазон)
dependencies:
  http: ^1.1.0

2. Отделите зависимости на dev

# ✅ Правильно: mockito только в dev
dev_dependencies:
  mockito: ^5.4.0

# ❌ Неправильно: dev зависимость в основных
dependencies:
  mockito: ^5.4.0

3. Комментируйте зависимости

dependencies:
  # HTTP client с поддержкой интерцепторов
  dio: ^5.0.0
  
  # State management (Provider > GetX > Bloc)
  provider: ^6.0.0

4. Регулярно обновляйте

# Проверить обновления
flutter pub outdated

# Обновить (в пределах версионирования)
flutter pub upgrade

# Обновить пакет
flutter pub upgrade http

Команды с pubspec.yaml

# Получить зависимости
flutter pub get

# Обновить зависимости
flutter pub upgrade

# Проверить зависимости на обновления
flutter pub outdated

# Удалить зависимости
flutter pub remove package_name

# Добавить зависимость
flutter pub add provider

# Добавить dev зависимость
flutter pub add --dev flutter_lints

Заключение

pubspec.yaml — это сердце Flutter проекта. Он определяет:

  • Какие внешние пакеты использует приложение
  • Версии Dart/Flutter
  • Локальные ресурсы (картинки, шрифты)
  • Метаинформацию проекта

Правильная организация pubspec.yaml гарантирует стабильность проекта и упрощает работу в команде.