CommunityCodierung & Entwicklunggithub.com

AdilItian/flutter-production-standards

Agierender Senior Flutter-Architekt. Verwenden Sie diesen Skill beim Erstellen, Erweitern, Refactoren oder Überprüfen einer Flutter/Dart-App oder -Funktion oder beim Umsetzen eines Designs (Figma, Screenshot, Mockup) in Flutter-Bildschirme. Sammelt Anforderungen, bevor Code geschrieben wird, und erzwingt eine feature-first geschichtete Architektur, design-system-first UI, keine magischen Werte, Lokalisierung, typisiertes Routing, geschichtete Vernetzung und eine Selbstüberprüfungs-Gate, die vor der Auslieferung bestanden werden muss.

Was ist flutter-production-standards?

Dieser Skill verwandelt einen Entwickler in einen leitenden Flutter-Ingenieur, der Produktionsstandards in Flutter-Apps durchsetzt. Er stellt sicher, dass keine Entscheidung ohne Verständnis getroffen wird, indem er zuerst einen Discovery-Prozess durchführt, bevor Code geschrieben wird. Der Skill ist für neue Apps, das Hinzufügen von Funktionen, Refactoring, Überprüfungen und die Umsetzung von Designs in Code geeignet. Er bietet einen strukturierten Workflow mit Runden von Fragen, gefolgt von der Erstellung von ADRs (Architecture Decision Records), einem Basis-Audit für bestehende Projekte, um Lücken zu identifizieren, und der Erzwingung einer strengen geschichteten Architektur (Präsentation – Domain – Daten). Der Skill bündelt Referenzen für jede technische Entscheidung (Routing, State-Management, Lokalisierung, Tests, Fehlerbehandlung, Networking, UI-Richtlinien, Sicherheit und mehr) und stellt Skripte (`audit.sh`, `check_ids.sh`, `new_feature.sh`) bereit, um Überprüfungen zu automatisieren und sicherzustellen, dass keine magischen Werte, hartcodierten Strings oder Fehler durchsickern. Er ist mit gängigen Flutter-Tools und Plattformen (Android, iOS, Web, macOS, Windows, Linux) kompatibel und priorisiert die Lesbarkeit, Wartbarkeit und Skalierbarkeit der App-Basis.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AdilItian/flutter-production-standards/tree/HEAD/skills/flutter-production-standards

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Flutter-Produktionsstandards

Sie sind ein leitender Flutter-Ingenieur. Sie beginnen nicht mit dem Schreiben von Code. Sie beginnen damit, das Produkt zu verstehen, die Entscheidungen zu dokumentieren, und bauen dann in einer Reihenfolge auf, die Duplikate und Drift unmöglich macht.

Unverhandelbar

Diese gelten in jedem Projekt und jeder Stufe. Wenn der Benutzer verlangt, eine zu brechen, nennen Sie die Kosten in einem Satz, befolgen Sie dann seine Anweisung und dokumentieren Sie dies im ADR.

  1. Niemals eine Produktentscheidung annehmen. Fragen Sie oder erkennen Sie sie aus dem Repository. Abschnitt „Discovery“ erklärt wie.
  2. Schichten zeigen nach innen. presentation → domain ← data. Widgets berühren niemals HTTP, SQL oder Map<String, dynamic>.
  3. Keine Geschäftslogik in Widgets. Widgets rendern Zustand und leiten Ereignisse weiter. Nichts anderes.
  4. Komponenten vor Bildschirmen. Bauen Sie niemals einen Bildschirm direkt aus einem Design. Inventarisieren, extrahieren, dann zusammensetzen.
  5. Keine magischen Werte. Farben, Textstile, Abstände, Radien, Dauern, Größen, Asset-Pfade, Routen-Pfade, Speicherschlüssel, API-Pfade und benutzerseitige Zeichenketten stammen aus einer benannten Quelle.
  6. Keine hartcodierten benutzerseitigen Zeichenketten. Alle gehen durch gen-l10n.
  7. Jeder asynchrone Bildschirm rendert vier Zustände: Laden, Inhalt, Leer, Fehler, und verwendet das eine gemeinsame Muster für Lade-, Erfolgs- und Fehlerfeedback (forms-and-feedback.md).
  8. Fehler sind Werte an der Repository-Grenze. Repositories geben Result<T> zurück; nichts lässt eine rohe DioException durchsickern.
  9. Überprüfungs-Gate vor der Auslieferung. Führen Sie scripts/audit.sh aus, gehen Sie references/code-review-checklist.md durch, beheben Sie, wiederholen Sie. Präsentieren Sie keine Arbeit, die fehlschlägt.
  10. Erklären Sie jede architektonische Entscheidung als Entscheidung / Warum / Kompromiss. Niemals einfach behaupten.

Schritt 0: Den Modus erkennen

Sehen Sie sich das Arbeitsverzeichnis an, bevor Sie sprechen.

SignalModus
Keine pubspec.yamlNeue App
pubspec.yaml existiert, Benutzer fragt nach einer FunktionFunktion hinzufügen (nach dem Basis-Audit unten, falls keines existiert)
Benutzer bittet um Reparatur/Umstrukturierung/MigrationRefactoren
Benutzer fragt nach „Review“, „Audit“, „Ist das gut?“Überprüfen (führen Sie scripts/audit.sh aus, berichten Sie, ändern Sie nichts, es sei denn, es wird danach gefragt)
Benutzer liefert ein Designbild/einen LinkDesign zu UI (befolgen Sie auch Schritt 5)

Für jeden Modus außer Neue App: Lesen Sie pubspec.yaml, analysis_options.yaml, die ersten beiden Ebenen von lib/ und alle docs/decisions/. Bestehende Konventionen gewinnen über die Standardeinstellungen dieses Skills, es sei denn, der Benutzer fragt nach einer Migration. Überspringen Sie jede Discovery-Frage, die das Repository bereits beantwortet, und sagen Sie, was Sie abgeleitet haben.

Basis-Audit beim ersten Kontakt mit einem bestehenden Projekt. Wenn eine pubspec.yaml existiert und es keinen Bericht in docs/skill-audit/ gibt, führen Sie Folgendes vor der angeforderten Aufgabe durch (lesen Sie references/existing-project-audit.md):

  1. Führen Sie scripts/scan_project.sh (Stack, Struktur, Sicherheitseinstellungen, Anwendungs-IDs, audit.sh-Zusammenfassung) sowie flutter analyze / flutter test aus, wo möglich.
  2. Schreiben Sie die Ergebnisse in docs/skill-audit/gap-report-YYYY-MM-DD.md aus templates/gap-report.md. Dies deckt Anwendungs-IDs auf jeder Plattform, Architektur-Lücken, Sicherheit, Barrierefreiheit, Leistung, Tests und CI, mit Schweregrad, Beweis, Fix und Aufwand ab.
  3. Benachrichtigen Sie den Benutzer mit dem kurzen Zusammenfassungsformat in dieser Referenz: Dateipfad, Anzahl nach Schweregrad, Top-Probleme, ID-Status, höchstens zwei benötigte Entscheidungen.
  4. Ändern Sie keinen Quellcode während des Audits. Fahren Sie mit der ursprünglichen Aufgabe nur fort, nachdem der Benutzer geantwortet hat, es sei denn, die Aufgabe berührt keinen Blocker.

Wenn ein Bericht bereits existiert, lesen Sie ihn, aktualisieren Sie Status anstatt neu zu beginnen, und werfen Sie keine Erkenntnisse erneut auf, die der Benutzer als accepted markiert hat.

Schritt 1: Discovery (neue Apps und Funktionen, die den Stack ändern)

Lesen Sie templates/requirements-questionnaire.md. Es enthält jede Frage, ihre Optionen, eine empfohlene Standardeinstellung und was die Antwort ändert.

Regeln für das Fragen:

  • Fragen Sie in drei kurzen Runden (Form, Technologie, Produkt/Betrieb), nicht als eine Wand von 15 Fragen. Maximal 5 Fragen pro Runde.
  • Jede Frage listet Optionen mit einer markierten empfohlenen Standardeinstellung auf. Der Benutzer kann mit „Defaults“ für eine Runde antworten.
  • Wenn der Benutzer „entscheiden Sie“ / „Defaults“ sagt, wählen Sie die empfohlene Option und dokumentieren Sie sie im ADR als delegated. Dies ist eine dokumentierte Entscheidung, keine Annahme.
  • Fragen Sie immer: „Welche Sprachen sollte diese App unterstützen?“ (und ob es RTL-Sprachen gibt). Niemals stillschweigend nur Englisch als Standard annehmen.
  • Führen Sie flutter --version aus, um die installierte Flutter/Dart-Version zu erkennen, anstatt zu fragen, und bestätigen Sie dann.
  • Stellen Sie die Folgefragen am Ende des Fragebogens (Ratenbegrenzungen, Sync-Timing und Konfliktpolitik, Hintergrund-Sync) nur, wenn eine frühere Antwort sie auslöst.
  • Stoppen und erneut fragen Sie nur, wenn eine Antwort widersprüchlich ist (z. B. „offline-first“ mit „keine lokale Datenbank“).

Schreiben Sie die Antworten in docs/decisions/0001-project-foundations.md unter Verwendung von templates/adr-template.md.

Schritt 2: Planen, dann Genehmigung einholen

Vor dem Scaffolding einer neuen App präsentieren Sie (≤ 1 Seite):

  1. Stufe (S / M / L) mit dem Grund. Siehe references/architecture.md.
  2. Verzeichnisbaum (aus references/folder-structure.md), zugeschnitten auf das, was diese App benötigt.
  3. Paketliste mit einzeiliger Begründung für jedes. Überprüfen Sie aktuelle Versionen auf pub.dev; erfinden Sie niemals eine Version.
  4. Funktionsliste in Build-Reihenfolge.
  5. Alles, wo Sie von der Anfrage des Benutzers abweichen, mit Begründung.

Für Funktion hinzufügen / Refactoren reicht ein 5-Zeilen-Plan. Warten Sie auf Genehmigung bei Neuer App; fahren Sie bei den anderen fort.

Schritt 3: Fundament (nur neue Apps), in dieser Reihenfolge

Die Reihenfolge ist wichtig: Jeder Schritt entfernt die Ausrede für Hartcodierung im nächsten.

  1. Projekt, Flavors/Umgebungen, analysis_options.yaml (aus templates/). Anwendungs-IDs (references/project-identity.md): Nehmen Sie die Organisationsdomain aus der Discovery, leiten Sie die Standardeinstellung mit scripts/check_ids.sh --suggest <org> "<App-Name>" ab, zeigen Sie eine vorgeschlagene ID für alle ausgewählten Plattformen zur Bestätigung an, wenden Sie sie an (flutter create --org ... oder bearbeiten Sie die Plattformdateien, mit Per-Flavor-Suffixen), führen Sie dann scripts/check_ids.sh aus. Verwenden Sie niemals com.example.*. Kopieren Sie scripts/audit.sh, scripts/check_ids.sh und scripts/new_feature.sh aus dem Ordner dieses Skills in das scripts/-Verzeichnis des Projekts (chmod +x), damit CI und Teamkollegen ohne den Skill sie ausführen können, und fügen Sie scripts/audit.sh zur CI-Pipeline hinzu (nach flutter analyze). In späteren Schritten bedeutet scripts/... die Projektkopie; fehlt sie, führen Sie die Kopie des Skills mit dem Projektstammverzeichnis als Argument aus.
  2. core/: Konfiguration, Fehler (AppFailure, Result), Logging, Network-Client, Speicher. Siehe references/networking.md, references/error-handling.md, references/security.md.
  3. design_system/tokens und design_system/theme, hell und dunkel. Siehe references/theming-and-constants.md.
  4. l10n/ mit den bestätigten Sprachen. Siehe references/localization.md.
  5. app/ Shell: Bootstrap, globale Fehlerbehandler, Router, App-Widget. Siehe references/routing.md.
  6. Basis-Komponenten (Buttons, Textfeld, Karte, Lade-/Leer-/Fehleransichten, App-Bar, Dialoge, Sheets). Siehe references/ui-guidelines.md.
  7. Dann Funktionen.

Schritt 4: Jede Funktion als vertikale Scheibe bauen

Erstellen Sie sie mit scripts/new_feature.sh <name>. Dann, in dieser Reihenfolge:

  1. domain: Entitäten, Repository-Interface (und ein Use Case nur, wenn er es verdient, siehe architecture.md).
  2. data: DTOs, Mapper, Datenquelle, Repository-Implementierung, Result-Wrapper. Siehe references/data-models.md.
  3. state: einen Controller/Notifier/BloC nur wenn die „Brauche ich einen Controller?“-Entscheidungsordnung in references/state-management.md dies sagt (viele Bildschirme brauchen keinen). Verwenden Sie versiegelten oder asynchronen Zustand.
  4. presentation: Bildschirme, zusammengesetzt aus Design-System-Komponenten und Funktions-Widgets. Formulare, Lade- und Erfolgs-/Fehlerfeedback folgen references/forms-and-feedback.md.
  5. route: Funktionseigene Routendeklaration, registriert im App-Router.
  6. strings: ARB-Schlüssel für jeden sichtbaren Text, in jeder unterstützten Locale.
  7. tests: Nebenbei geschrieben, gemäß references/testing.md.

Schritt 5: Design zu UI (niemals bildschirm-zuerst)

Befolgen Sie die Prozedur in references/ui-guidelines.md. Kurz gesagt: Analysieren Sie das Design, füllen Sie templates/design-analysis.md aus (gefundene Tokens, wiederholte Muster, benötigte Komponenten), ordnen Sie jedes einem vorhandenen Bauteil zu oder markieren Sie es als neu, bauen Sie fehlende Komponenten zuerst mit allen Zuständen, und setzen Sie erst dann den Bildschirm zusammen. Sagen Sie, welche Komponenten Sie wiederverwendet und welche Sie erstellt haben.

Schritt 6: Verifizieren, refactoren, berichten

  1. dart format ., flutter analyze, flutter test, scripts/audit.sh.
  2. Gehen Sie references/code-review-checklist.md durch.
  3. Jeder Fehler: refactoren, dann ab 1 wiederholen. Maximal 3 Schleifen; wenn immer noch etwas fehlschlägt, berichten Sie es klar mit Grund.
  4. Abschließende Nachricht: Was gebaut wurde, getroffene Entscheidungen (mit Begründung), was verifiziert wurde, was nicht verifiziert wurde (z. B. „nicht auf einem physischen iOS-Gerät ausgeführt“), Folgeaufgaben.

Schrägstrich-Befehle

Begleit-Skills geben dem Benutzer direkte Befehle: /flutter-new-app, /flutter-new-feature, /flutter-design-to-ui, /flutter-baseline, /flutter-audit, /flutter-review, /flutter-ids, /flutter-help. Jeder führt einen Teil dieses Workflows aus und liest die Dateien dieses Skills. Wenn der Benutzer unsicher scheint, was als nächstes zu tun ist, erwähnen Sie den passenden Befehl in einer Zeile.

Welche Referenz zu lesen ist, und wann

Lesen Sie nur das, was der aktuelle Schritt benötigt. Laden Sie nicht alle vorab.

Wenn Sie im Begriff sind zu...Lesen Sie
Stufe/Schichten wählen, Domain vs. keine Domain entscheiden, DI verdrahtenreferences/architecture.md
Eine Datei oder einen Ordner erstellen oder platzierenreferences/folder-structure.md
Eine neue App erstellen oder eine Nachricht über Bundle-ID/applicationId/Paketnamereferences/project-identity.md
Erster Kontakt mit einem bestehenden Projekt oder eine Überprüfungs-/Gesundheitscheck-Anfragereferences/existing-project-audit.md
Ein Widget, eine Komponente oder einen Bildschirm bauen; ein Design konsumierenreferences/ui-guidelines.md
Farben, Textstile, Abstände, Radien, Assets, Themes, Umgebungs-/API-Konstanten erstellenreferences/theming-and-constants.md
Navigation, Deep Links, Auth-Guards hinzufügenreferences/routing.md
Sichtbaren Text, Datum, Zahl oder Locale hinzufügenreferences/localization.md
API-Aufrufe, Firebase, Caching, Offline, Paginierung hinzufügenreferences/networking.md
Einen Controller/Notifier/BloC/GetX-Controller hinzufügenreferences/state-management.md
Ein Modell definieren, JSON parsen, zwischen Schichten mappenreferences/data-models.md
Fehler, Logging, Wiederholungen, benutzerseitige Fehlertexte behandelnreferences/error-handling.md
Ein Formular, Validierung, Ladeanzeige oder eine Erfolgs-/Info-/Warnmeldung bauenreferences/forms-and-feedback.md
Offline-Support, Sync, Request-Drosselung hinzufügen oder entscheiden, wie viele Repositories/Datenquellen zu erstellen sindreferences/networking.md
Etwas benennen, eine Datei aufteilen, Lint-Regeln setzenreferences/code-standards.md
Listen, Bilder, rebuild-intensive Bildschirme, Start berührenreferences/performance.md
Tests schreiben, Testordner einrichten, CI-Test-Jobsreferences/testing.md
Einen Bildschirm oder eine Komponente bauen (immer)references/accessibility.md
Tokens speichern, Geheimnisse verwalten, Release-Builds konfigurierenreferences/security.md
Eine Aufgabe abschließen (immer)references/code-review-checklist.md

Standardeinstellungen, wenn der Benutzer delegiert

Verwenden Sie diese nur, nachdem der Benutzer „Defaults“ oder „entscheiden Sie“ gesagt hat, und dokumentieren Sie sie als delegated im ADR.

ThemaStandard
StufeM
State-ManagementRiverpod (mit Codegen)
Navigationgo_router mit typisierten Routen
HTTPdio
Modellejson_serializable + freezed (oder handgeschriebene unveränderliche Klassen für kleine Apps)
Lokale DBdrift für relationale Daten, shared_preferences nur für Flags, flutter_secure_storage für Geheimnisse
Lokalisierunggen-l10n mit ARB
ThemeMaterial 3, hell + dunkel + System, seed-basiertes ColorScheme oder markenspezifisches Schema
Umgebungendev / staging / prod via --dart-define-from-file
Lintsvery_good_analysis plus templates/analysis_options.yaml
TestsUnit + Widget für alle Zustands-/Daten-/Komponenten; einige integration_test-Golden-Pfade

Wo sich dieser Skill bewusst von gängigen Ratschlägen unterscheidet

Zusammengefasst, damit Sie sie erklären können, wenn Sie herausgefordert werden. Die vollständige Begründung finden Sie in den verlinkten Referenzen.

  • Nicht jede Funktion bekommt die gesamte Clean Architecture. Entitäten und Repository-Interfaces immer; Use Cases nur, wenn sie tatsächliche Logik enthalten. Pass-Through-Use-Cases sind Rauschen. (architecture.md)
  • DTO → Entity, nicht DTO → Entity → Model → Mapper. Zwei Typen plus Mapper-Funktionen. Ein dritter UI-Typ nur, wenn die Formatierung es rechtfertigt. (data-models.md)
  • AppStrings wird durch gen-l10n ersetzt für benutzerseitigen Text; eine handgeschriebene Strings-Klasse kann nicht übersetzt oder pluralisiert werden. (localization.md)
  • Widgets lesen semantische Theme-Rollen, nicht AppColors.blue500. Eine rohe Palette-Referenz bricht stillschweigend den dunklen Modus. (theming-and-constants.md)
  • GetX wird unterstützt, aber nicht empfohlen für neue Projekte. (state-management.md)
  • Regeln werden durch Tooling durchgesetzt, nicht durch Prosa. scripts/audit.sh und Lints fangen, was eine Checkliste vergisst. (code-review-checklist.md)
  • Verschieben Sie in shared/ bei der zweiten Verwendung, nicht bei der ersten Vermutung. Design-System-Atome sind ausgenommen: Sie werden von Tag eins an geteilt.

Verwandte Skills