Files
cherrypick/openspec/changes/cherrypick-system-spec/specs/flutter-integration/spec.md

59 lines
3.4 KiB
Markdown
Raw Normal View History

2026-02-27 14:33:30 +03:00
## ADDED Requirements
### Requirement: Сущности Flutterинтеграции
Flutterинтеграция MUST предоставлять `CherryPickProvider` как `InheritedWidget` для доступа к DIscope в дереве виджетов.
#### Scenario: Публичная сущность провайдера
- **WHEN** разработчик импортирует Flutterпакет
- **THEN** `CherryPickProvider` доступен и может быть помещен в дерево виджетов
### Requirement: Жизненный цикл провайдера
`CherryPickProvider` MUST быть статическим проводником к scope и не владеть их жизненным циклом.
#### Scenario: Stateless поведение
- **WHEN** `CherryPickProvider` пересоздается с тем же child
- **THEN** он не инициирует изменения DIсостояния и не уведомляет зависимые виджеты
### Requirement: Доступ к root scope
Провайдер MUST предоставлять доступ к root scope через `openRootScope`.
#### Scenario: Открытие root scope
- **WHEN** вызывается `openRootScope`
- **THEN** возвращается root scope DIконтейнера
### Requirement: Доступ к subscope
Провайдер MUST предоставлять доступ к subscope через `openSubScope` с именем и разделителем.
#### Scenario: Открытие named subscope
- **WHEN** вызывается `openSubScope` с именем
- **THEN** возвращается subscope с указанным именем
#### Scenario: Пустое имя scope
- **WHEN** вызывается `openSubScope` без имени
- **THEN** возвращается root scope
### Requirement: Доступ через BuildContext
`CherryPickProvider.of(context)` MUST возвращать провайдер из ближайшего ancestor.
#### Scenario: Успешный lookup
- **WHEN** вызов происходит внутри поддерева провайдера
- **THEN** возвращается экземпляр провайдера
#### Scenario: Ошибка lookup
- **WHEN** вызов происходит вне поддерева провайдера
- **THEN** в debugрежиме происходит assertionошибка
2026-02-27 14:33:30 +03:00
### Requirement: Ошибки и сообщения
При отсутствии провайдера в дереве MUST быть диагностируемая ошибка.
#### Scenario: Диагностика отсутствия провайдера
- **WHEN** `CherryPickProvider.of(context)` не находит провайдер
- **THEN** в debugрежиме сообщение assertion указывает на отсутствие провайдера
2026-02-27 14:33:30 +03:00
### Requirement: Точки расширения
Flutterинтеграция MUST позволять использовать собственные DIscope стратегии поверх `CherryPickProvider`.
#### Scenario: Кастомная организация scope
- **WHEN** приложение использует собственные правила создания subscope
- **THEN** провайдер остается совместимым и не ограничивает стратегию