Layer-Based Clean Architecture
SkillCommunicationEnforce inward dependency flow, pure domain layers, and DTO-to-entity mapping in Flutter DDD architecture. Use when structuring layers or boundaries; defer navigation-only routing and feature implementation such as notifications.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Layer-Based Clean Architecture skill
What this skill tells your AI
The instructions your AI receives, as published by hoangnguyen0403/agent-skills-standard in skills/flutter/flutter-layer-based-clean-architecture/SKILL.md and read by ahel’s review.
Priority: P0 (CRITICAL)
Workflow: Add New Feature Across Layers
- Define domain entity with
@freezedinlib/domain/entities/ - Define repository interface in
lib/domain/repositories/ - Create DTO in
lib/infrastructure/dtos/withfromJson/toEntitymapper - Implement repository in
lib/infrastructure/repositories/ - Wire BLoC/Cubit in
lib/application/consuming repository interface - Register bindings in
get_itinjection container - Build screen in
lib/presentation/usingBlocBuilder
Structure
lib/
├── domain/ # Pure Dart: entities (@freezed), failures, repository interfaces
├── infrastructure/ # Implementation: DTOs, data sources, mappers, repo impls
├── application/ # Orchestration: BLoCs / Cubits
└── presentation/ # UI: Screens, reusable components
Implementation Guidelines
- Dependency Flow:
Presentation -> Application -> Domain <- Infrastructure. Dependencies point inward. - Pure Domain: No Flutter (Material/Store) or Infrastructure (Dio/Hive) dependencies in
Domain. - Functional Error Handling: Repositories must return
Either<Failure, Success>. - Always Map: Infrastructure must map DTOs to Domain Entities; not leak DTOs to UI.
See DTO-to-Entity mapping example.
- Immutability: Use
@freezedfor all entities and failures. - Logic Placement: No business logic in UI; widgets only display state and emit events.
- Inversion of Control: Use
get_itto inject repository implementations into BLoCs.
Anti-Patterns
- No DTOs in UI: Never import
.g.dartor Data class directly in Widget. - No Material in Domain: not import
package:flutter/material.dartindomainlayer. - No Shared Prefs in Repo: not use
shared_preferencesdirectly in Repository; use Data Source.
Reference & Examples
For full implementation templates and DTO-to-Domain mapping examples: See references/REFERENCE.md.
References
- feature-based-clean-architecture | bloc-state-management | dependency-injection | error-handling
Canonical response anchors
When this skill applies, preserve the following domain terminology or equivalent concrete examples in the answer when relevant:
- Flutter
Signals
- GitHub stars
- 565
- Forks
- 163
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
flutter-layer-based-clean-architecture- Source
- github.com/hoangnguyen0403/agent-skills-standard