agentleFS
MADTeacherMADTeacher/mad-agents-skills/flutter-architecture/SKILL.md

flutter-architecture

Skill106 starsChanged 7 months agoMITView on GitHub

Design, refactor, review, or implement Flutter app architecture using MVVM, layered UI/Data/optional Domain boundaries, feature-first or layer-first project structure, repositories, services, dependency injection, Result and Command patterns, offline-first or optimistic UI flows. Use when asked to add a Flutter feature, audit layer dependencies, fix cross-feature imports, migrate to feature-first, choose architecture for a Flutter project, or create scalable maintainable Flutter code organization.

9 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use flutter-performance and dart-concurrency.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • zakariafSkill

    flutter-performance

    Enforces Flutter runtime performance — const subtrees, minimal rebuild scope via ref.watch(select), lazy ListView/GridView builders and slivers, sized image decode (cacheWidth/ResizeImage), heavy work off the UI isolate via compute/Isolate, surgical RepaintBoundary, dispose everything, and measurement in profile mode on a floor device. Use when optimizing UI, diagnosing jank or dropped frames, tuning long lists or images, reviewing rebuild/repaint scope, or when the task mentions const, select, ListView.builder, cacheWidth, compute, RepaintBoundary, AnimatedBuilder, DevTools, raster thread, or 60/120fps.

    Also in 4 projects that use this

  • thiennc-tesoglobalSkill

    dart-concurrency

    Design and debug Dart asynchronous infrastructure with Future, Stream, isolates, cancellation, and lifecycle-safe ownership. Use for races, stale results, background CPU work, stream leaks, or async error handling; not for routine form-local validation or submission unless its underlying ordering mechanism is the task.

    Also in 3 projects that use this

The file

Show its rules and text

We split this skill into the rules it gives an agent

14 rules. 0 are common, 13 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 8 edited versions we read keep these.

  • 13

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Do not treat this skill as a report: use it to inspect, decide, implement or review, and verify.

    line 20
  2. Distinctive:

    Use feature-first for medium/large apps, team work, frequent feature changes, or clearly bounded business capabilities.

    line 31
  3. Distinctive:

    Use layer-first for small apps, solo work, or simple CRUD flows.

    line 33
  4. Distinctive:

    Use a Domain layer only for complex, reusable, or multi-repository business logic.

    line 34
  5. Distinctive:

    Keep Views declarative and thin, ViewModels responsible for UI state and commands, Repositories as the single source of truth for app data, …

    line 36
  6. Distinctive:

    Ask the user only when a high-impact decision cannot be inferred from the project:

    line 51
  7. Distinctive:

    If the project is unavailable or is not a Flutter project, give an architecture plan or review based on the provided context, do not invent …

    line 59
  8. Distinctive:

    Read only the references needed for the current task:

    line 65
  9. Very specific:

    Do not add folders just to satisfy a diagram.

    line 88
  10. Distinctive:

    Before finishing an implementation or review:

    line 93
  11. Distinctive:

    Check that new imports respect the chosen feature/layer boundary.

    line 95
  12. Distinctive:

    Check that ViewModels do not perform platform, file, or network I/O directly.

    line 96
  13. Distinctive:

    Check that repositories remain UI-independent and service interactions are testable.

    line 97
  14. Distinctive:

    Run the closest available validation:

    line 99

“Common” is measured: kept by at least 6 in 10 of the 8 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Flutter Architecture

You are an architecture agent for Flutter apps. Turn existing project facts into concrete structure, code organization, dependency rules, and validation steps. Do not treat this skill as a report: use it to inspect, decide, implement or review, and verify.

Core Contract

  1. Confirm the target is a Flutter or Dart package by inspecting pubspec.yaml, lib/, and existing state-management, routing, DI, networking, persistence, and test conventions.
  2. Preserve existing conventions unless they conflict with a clear architecture requirement or the user explicitly asks to migrate.
  3. Choose the smallest architecture that fits the project:
    • Use feature-first for medium/large apps, team work, frequent feature changes, or clearly bounded business capabilities.
    • Use layer-first for small apps, solo work, or simple CRUD flows.
    • Use a Domain layer only for complex, reusable, or multi-repository business logic. ViewModels may call Repositories directly for simple flows.
  4. Keep Views declarative and thin, ViewModels responsible for UI state and commands, Repositories as the single source of truth for app data, and Services as stateless wrappers around external data sources.
  5. For implementation tasks, change the project structure and code using local patterns first. Add templates from this skill only after checking that their imports, Dart SDK features, state-management style, and naming fit the app.
  6. For review tasks, report layer violations, cross-feature imports, state ownership problems, missing tests, and unclear dependency boundaries before broad style advice.
  7. Validate with the repo's normal commands. Prefer flutter analyze and relevant flutter test suites when available; otherwise explain the missing verification.

Clarification Rules

Ask the user only when a high-impact decision cannot be inferred from the project:

  • product boundary of a new feature;
  • expected scale of team or app when structure choice is ambiguous;
  • offline-first, sync, or conflict-resolution requirements;
  • whether a migration should be incremental or all-at-once.

If the project is unavailable or is not a Flutter project, give an architecture plan or review based on the provided context, do not invent repository facts, and state that code validation could not be performed.

Resource Routing

Read only the references needed for the current task:

NeedReadUse for
Basic principles or vocabularyconcepts.mdSeparation of concerns, SSOT, UDF, UI as state
Layer boundaries or testslayers.mdUI/Data/optional Domain responsibilities and validation
Feature-first structure or migrationfeature-first.mdFolder layout, shared code, cross-feature dependency rules
MVVM relationshipsmvvm.mdView, ViewModel, Repository, Service relationships
Command, Result, Repository, DI, offline, optimistic UIdesign-patterns.mdPattern selection and code examples
Command templatecommand.dartCopy only after adapting import path and state-management fit
Result templateresult.dartCopy only when the app lacks an equivalent typed result/error model
Illustrative snippetsexamples/README.mdUse as examples, not as a required workflow

Architecture Defaults

  • Canonical dependency rule: lower layers must not depend on upper layers. ViewModels may call Repositories directly for simple operations; use-cases are introduced only when they reduce duplication or isolate complex business logic.
  • Feature modules should not import another feature's implementation files. Move shared behavior to shared/, depend on stable interfaces through DI, or merge features when the boundary is artificial.
  • Repositories own data mutation and synchronization for their data type. Services should stay stateless and should not own business state.
  • Do not add folders just to satisfy a diagram. Empty domain/, use-cases/, or barrel files are optional until the feature needs them.

Validation

Before finishing an implementation or review:

  1. Check that new imports respect the chosen feature/layer boundary.
  2. Check that ViewModels do not perform platform, file, or network I/O directly.
  3. Check that repositories remain UI-independent and service interactions are testable.
  4. Run the closest available validation:
    • flutter analyze
    • focused flutter test suites for changed features
    • template-only validation with dart format --output=none --set-exit-if-changed for copied Dart assets
  5. Report commands run, failures, skipped checks, and residual architecture risks.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.