Skill v1.0.1
currentAutomated scan100/1006 files
version: "1.0.1" name: flutter-ui-ux description: | Comprehensive Flutter UI/UX development skill for creating beautiful, responsive, and animated mobile applications. Use when user asks to: (1) Build Flutter UI components or screens (2) Implement animations and transitions (3) Design responsive layouts (4) Create custom widgets and themes (5) Optimize UI performance and accessibility Triggers: "create Flutter UI", "build Flutter screen", "Flutter animations", "responsive Flutter layout", "custom Flutter widgets", "Flutter theme design"
Flutter UI/UX Development
Create beautiful, responsive, and animated Flutter applications with modern design patterns and best practices.
Core Philosophy
"Mobile-first, animation-enhanced, accessible design" - Focus on:
| Priority | Area | Purpose | |
|---|---|---|---|
| 1 | Widget Composition | Reusable, maintainable UI components | |
| 2 | Responsive Design | Adaptive layouts for all screen sizes | |
| 3 | Animations | Smooth, purposeful transitions and micro-interactions | |
| 4 | Custom Themes | Consistent, branded visual identity | |
| 5 | Performance | 60fps rendering and optimal resource usage |
Development Workflow
Execute phases sequentially. Complete each before proceeding.
Phase 1: Analyze Requirements
- Understand app structure - Identify existing widgets, screens, and navigation
- Design system review - Check existing themes, colors, and typography
- Platform considerations - Note iOS/Android specific requirements
- Performance constraints - Identify animation complexity and rendering needs
Output: UI requirements analysis with component breakdown.
Phase 2: Design Widget Architecture
- Widget hierarchy planning - Design composition tree
- State management strategy - Choose StatefulWidget vs StatelessWidget
- Custom widget identification - Plan reusable components
- Theme integration - Define color schemes and typography
Output: Widget architecture diagram and component specifications.
Phase 3: Implement Core UI
- Create base widgets - Build foundational components
- Implement responsive layouts - Use MediaQuery, LayoutBuilder, Flex/Expanded
- Add custom themes - ThemeData, ColorScheme, TextThemes
- Integrate navigation - Implement routing and transitions
Widget Composition Patterns:
// ✅ DO: Compose small, reusable widgetsclass CustomCard extends StatelessWidget {final Widget child;final EdgeInsets padding;const CustomCard({required this.child, this.padding = EdgeInsets.all(16)});@overrideWidget build(BuildContext context) {return Card(elevation: 4,child: Padding(padding: padding, child: child),);}}// ✅ DO: Use const constructors where possibleconst Icon(Icons.add) // Better than Icon(Icons.add)
Phase 4: Add Animations
- Implicit animations - AnimatedContainer, AnimatedOpacity
- Explicit animations - AnimationController with Tween
- Hero animations - Screen transitions with Hero widgets
- Micro-interactions - Button presses, hover effects, loading states
Animation Performance Rules:
// ✅ DO: Use performance-optimized animationsAnimatedBuilder(animation: controller,builder: (context, child) => Transform.rotate(angle: controller.value * 2 * math.pi,child: child, // Pass child to avoid rebuilding),child: const Icon(Icons.refresh),)// ❌ DON'T: Animate expensive operations// Avoid animating complex layouts or heavy widgets
Phase 5: Optimize and Test
- Performance profiling - Use Flutter DevTools
- Accessibility testing - Screen readers, contrast ratios
- Responsive testing - Multiple screen sizes and orientations
- Animation smoothness - 60fps validation
Quick Reference
Responsive Design Patterns
| Technique | Use Case | Implementation | |
|---|---|---|---|
| LayoutBuilder | Responsive layouts | LayoutBuilder(builder: (context, constraints) => ...) | |
| MediaQuery | Screen info | MediaQuery.of(context).size.width | |
| Flexible/Expanded | Flex layouts | Flexible(child: ...) or Expanded(child: ...) | |
| AspectRatio | Fixed ratios | AspectRatio(aspectRatio: 16/9, child: ...) |
Animation Types
| Type | Widget | Duration | Use Case | |
|---|---|---|---|---|
| Fade | AnimatedOpacity | 200-300ms | Show/hide content | |
| Slide | SlideTransition | 250-350ms | Screen transitions | |
| Scale | AnimatedScale | 150-250ms | Button presses | |
| Rotation | RotationTransition | 1000-2000ms | Loading indicators |
Custom Widget Examples
Themed Button:
class ThemedButton extends StatelessWidget {final String text;final VoidCallback onPressed;const ThemedButton({required this.text, required this.onPressed});@overrideWidget build(BuildContext context) {return ElevatedButton(onPressed: onPressed,style: ElevatedButton.styleFrom(backgroundColor: Theme.of(context).colorScheme.primary,foregroundColor: Theme.of(context).colorScheme.onPrimary,padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),),child: Text(text),);}}
Responsive Card:
class ResponsiveCard extends StatelessWidget {final Widget child;const ResponsiveCard({required this.child});@overrideWidget build(BuildContext context) {return LayoutBuilder(builder: (context, constraints) {if (constraints.maxWidth > 600) {return _buildWideLayout(child);} else {return _buildNarrowLayout(child);}},);}Widget _buildWideLayout(Widget child) {return Card(margin: const EdgeInsets.all(16),child: Padding(padding: const EdgeInsets.all(24), child: child),);}Widget _buildNarrowLayout(Widget child) {return Card(margin: const EdgeInsets.all(8),child: Padding(padding: const EdgeInsets.all(16), child: child),);}}
Resources
- Widget patterns: See
references/widget-patterns.md - Animation examples: See
references/animation-patterns.md - Theme templates: See
references/theme-templates.md - Performance guide: See
references/performance-optimization.md
Technical Stack
- Core Widgets: StatelessWidget, StatefulWidget, InheritedWidget
- Layout: Row, Column, Stack, GridView, ListView
- Animation: AnimationController, Tween, AnimatedWidget
- Themes: ThemeData, ColorScheme, TextTheme
- Navigation: Navigator, MaterialPageRoute, Hero
Accessibility (Required)
Always implement:
// Semantic labels for screen readersSemantics(label: 'Add item to cart',button: true,child: IconButton(icon: Icon(Icons.add_cart), onPressed: () {}),)// High contrast supportTheme.of(context).colorScheme.contrast() == Brightness.dark// Font scalingMediaQuery.of(context).accessibleNavigation
Performance Guidelines
- Use
constwidgets where possible - Prefer
ListView.builderfor long lists - Avoid unnecessary rebuilds with
constkeys - Use
RepaintBoundaryfor complex animations - Profile with Flutter DevTools regularly
This Flutter UI/UX skill transforms mobile app development into a systematic process that ensures beautiful, responsive, and performant applications with exceptional user experiences.