Focused Agent Skills for complete Flutter and Dart app delivery.
71
89%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
When implementing complex motion or addressing accessibility in Flutter, apply these practices:
AnimationController for sequential or overlapping animations.Interval to a CurvedAnimation.SpringSimulation or FrictionSimulation for natural, interruptible gestures.AnimationController.animateWith(Simulation).'$tabName-$productId') and pass the selected tag to the destination.HeroMode; verify forward and reverse flights as well as the absence of duplicate-tag assertions.See the Hero contract for matching tags and nested-navigator participation.
MediaQuery.disableAnimationsOf(context) or MediaQuery.accessibleNavigationOf(context).AnimatedSwitcher treats the new child as the same child — and skips the transition — when Widget.canUpdate holds: same runtimeType and same key. Swapping between two widgets of the same type with no explicit key (two Text widgets, two instances of one custom widget) updates in place and no transition plays. Children of different types already animate without keys.Key (such as ValueKey(data.id) or ValueKey(stateName)).rive or lottie (or an equivalent asset-driven animation package) before hand-rolling the same result with CustomPainter or a long AnimationController sequence. Reusing the existing package keeps the asset editable by design tooling and avoids re-deriving timing curves by hand. If no asset exists and the motion is simple enough to express in code, hand-rolling with AnimationController is reasonable.State's dispose() — for lottie, the AnimationController passed as controller: (a loaded LottieComposition is plain data with no dispose()); for rive, the controller or file objects its current API documents as disposable — and respect reduced-motion preferences by showing a static frame or skipping playback.dispose() on AnimationController instances within the owning State's dispose() method.SingleTickerProviderStateMixin for one controller, or TickerProviderStateMixin for multiple. Never leak tickers across route changes..tessl-plugin
skills
dart-concurrency
dart-language
flutter-accessibility
flutter-ai-integration
flutter-animation
flutter-app-workflow
flutter-architecture
flutter-authentication
flutter-background-execution
flutter-build-release
flutter-ci-cd
flutter-code-review
flutter-dependency-upgrades
flutter-device-testing
flutter-figma-workflow
flutter-in-app-purchases
flutter-localization
references
flutter-networking
flutter-notifications
flutter-observability
flutter-openapi-client
flutter-package-development
flutter-performance
flutter-persistence
flutter-platform-integration
flutter-product-analytics
flutter-responsive-layout
flutter-runtime-debugging
flutter-security
flutter-state-management
flutter-testing
flutter-text-rendering
references
flutter-ui-design
flutter-ui-patterns
flutter-visual-effects