Flutter-Projektkonventionen
Wendet Flutters Regeln zu Asynchronität, Navigation und Widget-Lebenszyklus innerhalb vorhandener Zustandsverwaltung an.
flutter-conventions
Entdecke, wie der Skill hilftWann ist der Skill hilfreich?
Nutze ihn bei übermäßigen Neubauten, Controller-Lecks oder Aktualisierungen bereits verschwundener Flutter-Seiten.
Wobei hilft er dir?
- Bewahrt den vorhandenen Ansatz zur Zustandsverwaltung.
- Regelt Navigation, Lebenszyklus und Controller-Freigabe ausdrücklich.
- Prüft eingebundene Kontexte nach Await und isoliert aufwendige Berechnungen.
Das könntest du fragen
Behebe ein Flutter-Formular, das nach Schließen der Seite navigiert. Starte langsames Speichern und verlasse vorher die Ansicht. Ein verworfener Kontext darf weder navigieren noch Meldungen zeigen; Controller werden freigegeben.
Ausführliche Dokumentation
Hier findest du die ursprüngliche Anleitung, Beispiele und Prüfschritte des Skills in ihrer Originalsprache.
Weniger anzeigen
Flutter & Dart
Build maintainable, 60/120fps Flutter applications with layered architecture, fine-grained widget rebuilds, sound null safety and idiomatic Dart.
1. Layered architecture and state management
- Follow the repository's single state-management pattern (Riverpod, Bloc/Cubit, Provider or ChangeNotifier + ViewModel)—never introduce a second competing state library.
- Separate UI and business logic:
- UI layer (Screens & Widgets): renders immutable state, handles layout/animations, and dispatches user intents. Keep
build()pure, synchronous and free of side effects or network calls. - Logic layer (Notifiers / Blocs / ViewModels): coordinates screen state (
AsyncValue/ sealed state classes), form validation and optimistic updates. - Data layer (Repositories & Services): encapsulates HTTP clients (
dio/http), local databases (drift/sqflite), secure storage (flutter_secure_storage) and platform channels.
- UI layer (Screens & Widgets): renders immutable state, handles layout/animations, and dispatches user intents. Keep
- Narrow rebuild scope:
- Extract reusable
StatelessWidget/ConsumerWidgetclasses rather than helper methods returningWidgetso Flutter's element tree short-circuits rebuilds. - Use
constconstructors everywhere possible and subscribe narrowly (ref.watch(provider.select((s) => s.field)),BlocSelector,context.select).
- Extract reusable
2. Navigation, predictive back and lifecycle
- Declarative routing (
go_router/ Navigator 2.0):- Pass compact path/query parameters (
state.pathParameters['id']) rather than non-serializableextraobjects so routes survive deep links and state restoration. - Centralize auth redirects using
GoRouter(redirect: ..., refreshListenable: authRepository)and usecontext.go()when replacing the navigation stack (post-login, post-checkout) vscontext.push()for drill-down screens.
- Pass compact path/query parameters (
- Android 14+ predictive back & pop interception:
- Use
PopScope<T>(canPop: !hasUnsavedChanges, onPopInvokedWithResult: (didPop, result) async { if (didPop) return; ... })instead of the deprecatedWillPopScopeoronPopInvoked.
- Use
- Lifecycle & controller cleanup:
- Use
AppLifecycleListener(orWidgetsBindingObserver) to pause cameras/timers/streams ononPause/onInactiveand refresh ononResume. - Always dispose
TextEditingController,FocusNode,ScrollController,AnimationControllerandStreamSubscriptionindispose().
- Use
3. Async safety, Isolates and code generation
- Async context safety: never create a
FutureorStreaminsidebuild(). After anyawaitin a widget or stateful callback, checkif (!context.mounted) return;before callingNavigator,ScaffoldMessengerorTheme.of(context). - Offload heavy CPU work to Isolates: run heavy JSON parsing, encryption or image processing via
await Isolate.run(() => ...)orcompute(). When calling platform plugins from a background isolate, initialize the messenger first withBackgroundIsolateBinaryMessenger.ensureInitialized(rootIsolateToken). - Codegen & models: model domain data and union states with Dart 3
sealed class/ pattern matching or@freezed+@JsonSerializable. Never hand-edit.g.dartor.freezed.dartfiles—rundart run build_runner build --delete-conflicting-outputs.
4. Scrolling, adaptive layout and platform channels
- Use
ListView.builder,ListView.separatedorCustomScrollViewwithSliverList.builderfor dynamic lists; setitemExtentorprototypeItemwhen item heights are uniform. - Build responsive layouts with
LayoutBuilder,MediaQuery.sizeOf(context)andSafeArea(avoidingMediaQuery.of(context)when only size or padding is needed, so keyboard animations do not rebuild unrelated subtrees). - Prefer type-safe Pigeon (
@HostApi(),@FlutterApi()) or well-structuredMethodChannelwrappers that catchPlatformExceptionandMissingPluginException.
5. Verification
- Run
flutter analyze,dart format --output=none --set-exit-if-changed, unit tests and widget tests (testWidgets,pumpWidget,pumpAndSettle).
Before you finish
- Widgets use
constconstructors, narrow selectors and properdispose()cleanup. -
context.mountedchecked after everyawait; noFuture/Streamcreated inbuild(). -
PopScope(onPopInvokedWithResult) andgo_routerauth/deep-link rules respected. - Codegen updated,
flutter analyzeclean, andflutter testpasses.
Enthaltene Dateien 2
LICENSE.txtSKILL.md
Über dieses Skill-Paket
flutter-conventions
flutter-conventions: Entwickelt mobile Apps, die Navigation, native Integrationen, Offline-Daten und unterbrochene Sitzungen zuverlässig behandeln.
Weniger anzeigen
flutter-conventions
flutter-conventions: Entwickelt mobile Apps, die Navigation, native Integrationen, Offline-Daten und unterbrochene Sitzungen zuverlässig behandeln.
Enthält den vollständigen Skill und seine Begleitdateien (2 Dateien). Der genaue, ursprünglich verfasste Anwendungsbereich bleibt unten erhalten.
Ursprüngliche Skill-Beschreibung (Quellsprache)
Use when working on a Flutter or Dart app, widgets (StatelessWidget, StatefulWidget, Slivers), state management (Riverpod, Bloc/Cubit, Provider), go_router, AppLifecycleListener, PopScope, Isolates, platform channels/Pigeon, freezed/build_runner or flutter test.
Installiere den Skill, prüfe seine Quelle und Vertrauenseinstellungen und aktiviere ihn für das passende Projekt oder den Agenten.
Voraussetzungen
- Orqestria auf deinem Computer installiert.
