skills/flutter-ui-ux/SKILL.md
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"
npx skillsauth add ajianaz/skills-collection flutter-ui-uxInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Create beautiful, responsive, and animated Flutter applications with modern design patterns and best practices.
"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 |
Execute phases sequentially. Complete each before proceeding.
Output: UI requirements analysis with component breakdown.
Output: Widget architecture diagram and component specifications.
Widget Composition Patterns:
// ✅ DO: Compose small, reusable widgets
class CustomCard extends StatelessWidget {
final Widget child;
final EdgeInsets padding;
const CustomCard({required this.child, this.padding = EdgeInsets.all(16)});
@override
Widget build(BuildContext context) {
return Card(
elevation: 4,
child: Padding(padding: padding, child: child),
);
}
}
// ✅ DO: Use const constructors where possible
const Icon(Icons.add) // Better than Icon(Icons.add)
Animation Performance Rules:
// ✅ DO: Use performance-optimized animations
AnimatedBuilder(
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
| 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: ...) |
| 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 |
Themed Button:
class ThemedButton extends StatelessWidget {
final String text;
final VoidCallback onPressed;
const ThemedButton({required this.text, required this.onPressed});
@override
Widget 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});
@override
Widget 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),
);
}
}
references/widget-patterns.mdreferences/animation-patterns.mdreferences/theme-templates.mdreferences/performance-optimization.mdAlways implement:
// Semantic labels for screen readers
Semantics(
label: 'Add item to cart',
button: true,
child: IconButton(icon: Icon(Icons.add_cart), onPressed: () {}),
)
// High contrast support
Theme.of(context).colorScheme.contrast() == Brightness.dark
// Font scaling
MediaQuery.of(context).accessibleNavigation
const widgets where possibleListView.builder for long listsconst keysRepaintBoundary for complex animationsThis Flutter UI/UX skill transforms mobile app development into a systematic process that ensures beautiful, responsive, and performant applications with exceptional user experiences.
tools
Replace with description of the skill and when Claude should use it.
testing
Generate structured task lists from specs or requirements. IMPORTANT: After completing ANY spec via ExitSpecMode, ALWAYS ask the user: "Would you like me to generate a task list for this spec?" Use when user confirms or explicitly requests task generation from a plan/spec/PRD.
tools
Optimize SvelteKit applications by leveraging SvelteKit's full-stack architecture for instant server-side rendering and progressive enhancement. Specialized in load functions, form actions, and SvelteKit's data loading patterns. Use when: - User reports slow initial page load with loading spinners - Page uses onMount + fetch for data fetching - Store patterns cause waterfall fetching - Need to improve SEO (content not in initial HTML) - Converting client-side data fetching to server-side load functions - Implementing progressive enhancement patterns Triggers: "slow loading", "optimize fetching", "SSR data", "SvelteKit optimization", "remove loading spinner", "server-side fetch", "convert to load function", "progressive enhancement", "data fetch lambat", "loading lama"
development
Implement or extend user-facing workflows in SvelteKit applications with full-stack capabilities. Specialized in SvelteKit's load functions, form actions, and progressive enhancement. Use when the feature is primarily a UI/UX change backed by existing APIs, affects only the web frontend, and requires following SvelteKit conventions.