Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Структура 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
-
flutter pub get — скачивает зависимости
flutter pub get # Скачивает пакеты в .pub-cache/ и создаёт pubspec.lock -
pubspec.lock — lock-файл (автоматически создаётся)
# Хранит точные версии установленных пакетов http: dependency: "direct main" description: name: http url: "https://pub.dev" source: hosted version: "1.1.0" -
Assets — автоматически включаются в build
// Использование Image.asset('assets/images/logo.png') -
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 гарантирует стабильность проекта и упрощает работу в команде.