# Инструкция по запуску проекта

## Предварительные требования

1. **Flutter SDK** (версия 3.0.0 или выше)
   - Установите Flutter: https://docs.flutter.dev/get-started/install
   - Проверьте установку: `flutter doctor`

2. **Android Studio** или **VS Code** с Flutter плагином

3. **Android SDK** (для сборки под Android)
   - MinSDK: 21
   - TargetSDK: 34
   - CompileSDK: 34

## Установка зависимостей

```bash
cd client-mobile
flutter pub get
```

## Генерация кода

Проект использует code generation для:
- Freezed (immutable модели)
- AutoRoute (навигация)
- Isar (база данных)

```bash
dart run build_runner build --delete-conflicting-outputs
```

Для автоматической генерации при изменениях:
```bash
dart run build_runner watch --delete-conflicting-outputs
```

## Запуск приложения

### Android
```bash
flutter run
```

### Сборка релиза
```bash
flutter build apk --release
```

## Структура проекта

```
lib/
├── core/                    # Общие компоненты
│   ├── constants/           # Константы приложения
│   ├── errors/              # Обработка ошибок
│   ├── network/             # Сетевой клиент (Dio)
│   └── theme/               # Темы оформления
├── features/                # Функциональные модули
│   ├── auth/                # Аутентификация
│   │   ├── data/            # Data layer
│   │   ├── domain/          # Domain layer
│   │   └── presentation/    # UI layer (BLoC, страницы)
│   ├── chat/                # Чаты
│   ├── profile/             # Профиль
│   └── settings/            # Настройки
└── internal/                # Внутренняя конфигурация
    ├── di/                  # Dependency Injection (GetIt)
    └── router/              # Навигация
```

## Архитектура

Проект следует принципам **Clean Architecture**:

- **Domain Layer**: Бизнес-логика, entities, use cases, repository interfaces
- **Data Layer**: Реализации репозиториев, datasources, модели
- **Presentation Layer**: UI, BLoC, страницы, виджеты

## State Management

Используется **flutter_bloc** для управления состоянием:
- Каждый feature имеет свой BLoC
- События и состояния генерируются через Freezed
- DI через GetIt

## Навигация

Используется **auto_route** для декларативной навигации.

## База данных

Используется **Isar** - быстрая NoSQL база данных для Flutter.

## Сетевые запросы

- **Dio** для REST API запросов
- **SignalR** для real-time обновлений

## Тестирование

```bash
flutter test
```

## Полезные команды

```bash
# Анализ кода
flutter analyze

# Форматирование
dart format .

# Очистка
flutter clean

# Проверка зависимостей
flutter pub outdated
```

## Контакты

Для вопросов и предложений обращайтесь к команде разработки.
