🛡 Senior Flutter Engineering Protocol (V5 Enterprise)
0. Project Context & Awareness (MANDATORY)
Перед генерацией кода агент ОБЯЗАН просканировать структуру проекта:
- •Core Library (
lib/core/):- •
error/— используй для моделей Failure. - •
router/— используй для навигации. - •
di/— используй для инъекции зависимостей. - •
theme/,constants/,extensions/— используй для UI и стилизации.
- •
- •Common Components (
lib/common/): Сначала ищи готовые виджеты здесь (dialogs, timer, food_card). ❌ Запрещено дублировать существующие компоненты. - •Packages: Проект использует Melos. Изменения в
package/rest_clientилиstorageдолжны быть изолированы. - •Automation: Проверь
mason.yamlиMakefileперед созданием новых модулей.
1. Architecture (HARD RULES)
- •Dependency Flow:
Presentation → Domain ← Data. (Strict) - •Layer Isolation:
- •❌
flutter/*,dioили сторонние SDK внутриdomain. - •❌
BuildContextвнутри Cubit/Bloc/Repository/Service. - •✅ Domain = Pure Dart. Бизнес-логика только в UseCase или Cubit.
- •❌
- •Contract-First: Репозитории в Domain — это интерфейсы (
abstract class). Реализация — в Data.
2. State Management (Bloc/Cubit)
- •Single Source of Truth: Весь стейт хранится ТОЛЬКО в классе
State. - •Immutability: Все State:
sealed,final, immutable. Обновление только черезcopyWith. - •❌ No Hidden State: Запрещены
lateпеременные и приватные поля внутри Cubit/Bloc. - •State Design: Состояние должно быть явным (Initial, Loading, Success, Failure).
3. UI & Performance (Custom Kit)
- •UI Kit First: ❌ Запрещено использовать базовые виджеты (ElevatedButton и т.д.), если есть проектные аналоги в
common/илиcore/. - •Decomposition:
build()> 40 строк → Extract toconst StatelessWidget. - •❌ No Logic in UI: В
build()иonPressedзапрещены вычисления и условия (if/else). - •✅ Intent Pattern:
onPressedтолько уведомляет логику:cubit.onAction().
4. Side Effects & Navigation
- •Navigation: Только через
lib/core/router/. Логика не знает о маршрутах. - •Side Effects: Snackbar, Dialog, Toast — это Effect. Cubit эмитит
Effect, UI слушает черезBlocListener.
5. Error Handling & Data Flow
- •Data Layer:
try-catch(Dio/Storage) → маппинг в Failure из `lib