Flutter Frontend Design Skill
This skill guides creation of distinctive, production-grade Flutter interfaces that avoid generic "AI slop" aesthetics. Implement real working Flutter/Dart code with exceptional attention to aesthetic details and creative choices.
The user provides Flutter UI requirements: a screen, widget, component, or full app to build. They may include context about the purpose, audience, platform targets, or technical constraints.
Design Thinking (Before Coding)
Before writing any Dart code, understand the context and commit to a BOLD aesthetic direction:
- Purpose: What problem does this interface solve? Who uses it? Mobile-first? Tablet? Web?
- Tone: Pick a strong direction: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, glassmorphism, neumorphism, claymorphism, etc.
- Platform: Material 3, Cupertino, or custom design system? Adaptive UI?
- Constraints: State management (Riverpod, Bloc, Provider, GetX), navigation (GoRouter, auto_route), target platforms.
- Differentiation: What makes this UNFORGETTABLE? What's the one thing someone will remember?
CRITICAL: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work — the key is intentionality, not intensity.
Flutter Architecture Patterns
Always follow these Flutter-specific patterns:
Widget Structure
lib/
├── main.dart
├── app.dart # MaterialApp / CupertinoApp config
├── core/
│ ├── theme/
│ │ ├── app_theme.dart # ThemeData definitions
│ │ ├── app_colors.dart # Color constants & extensions
│ │ ├── app_typography.dart # TextStyle definitions
│ │ └── app_spacing.dart # Spacing constants
│ ├── constants/
│ └── utils/
├── features/
│ └── feature_name/
│ ├── presentation/
│ │ ├── screens/
│ │ ├── widgets/
│ │ └── controllers/
│ ├── domain/
│ └── data/
└── shared/
└── widgets/ # Reusable custom widgets
State Management
- Use
StatefulWidget for simple local state
- Recommend Riverpod or Bloc for complex state
- Always separate UI from business logic
- Use
ValueNotifier / ChangeNotifier for lightweight reactive patterns
Responsive Design
// Always think responsive
LayoutBuilder(
builder: (context, constraints) {
if (constraints.maxWidth > 1200) return _desktopLayout();
if (constraints.maxWidth > 600) return _tabletLayout();
return _mobileLayout();
},
)
Flutter Aesthetics Guidelines
Typography
- NEVER use default Material font (Roboto) without customization
- Use Google Fonts package (
google_fonts) for distinctive typography
- Pair a bold display font with a refined body font
- Examples of strong pairings:
- Display:
Playfair Display / Body: Source Sans Pro
- Display:
Space Grotesk / Body: DM Sans
- Display:
Cormorant Garamond / Body: Fira Sans
- Display:
Sora / Body: Inter (when Inter fits the design)
- Display:
Clash Display / Body: Satoshi
- Define ALL text styles in
AppTypography class using TextTheme extensions
Color & Theme
- Define colors using
ColorScheme.fromSeed() or custom ColorScheme
- Use
ThemeExtension<T> for custom color properties beyond Material
- Support BOTH light and dark themes from the start
- CSS variables equivalent → Dart constants +
Theme.of(context).extension<T>()
- Dominant colors with sharp accents outperform timid, evenly-distributed palettes
// Example: Strong color system
class AppColors {
// Primary palette
static const primary = Color(0xFF1A1A2E);
static const accent = Color(0xFFE94560);
static const surface = Color(0xFF16213E);
static const background = Color(0xFF0F3460);
// Semantic colors
static const success = Color(0xFF00C897);
static const warning = Color(0xFFFFB800);
static const error = Color(0xFFFF4757);
// Gradients
static const heroGradient = LinearGradient(
colors: [Color(0xFF667eea), Color(0xFF764ba2)],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
);
}
Motion & Animation
Flutter excels at animation. Use it:
- Implicit animations:
AnimatedContainer, AnimatedOpacity, AnimatedScale, AnimatedSlide, AnimatedSwitcher
- Hero animations: For screen transitions with shared elements
- Staggered animations: Use
Interval with AnimationController for orchestrated reveals
- Micro-interactions:
GestureDetector + AnimatedScale for tap feedback
- Page transitions: Custom
PageRouteBuilder with SlideTransition, FadeTransition, ScaleTransition
- Lottie: For complex illustrations and loading states (
lottie package)
- Rive: For interactive vector animations (
rive package)
// Staggered list animation example
class StaggeredListItem extends StatelessWidget {
final int index;
final Animation<double> animation;
Widget build(BuildContext context) {
return SlideTransition(
position: Tween<Offset>(
begin: const Offset(0, 0.3),
end: Offset.zero,
).animate(CurvedAnimation(
parent: animation,
curve: Interval(
index * 0.1,
(index * 0.1) + 0.4,
curve: Curves.easeOutCubic,
),
)),
child: FadeTransition(
opacity: animation,
child: child,
),
);
}
}
Spatial Composition
- Use
SliverAppBar with FlexibleSpaceBar for immersive scroll effects
CustomScrollView with mixed Sliver widgets for complex layouts
Stack + Positioned for overlapping elements
Transform for rotation, skew, perspective effects
ClipPath / CustomClipper for non-rectangular shapes
CustomPaint / CustomPainter for unique backgrounds and decorative elements
Backgrounds & Visual Details
ShaderMask for gradient text and masked effects
BackdropFilter with ImageFilter.blur for glassmorphism
CustomPainter for geometric patterns, noise textures, decorative elements
DecoratedBox with complex BoxDecoration (gradients, shadows, borders)
Container with BoxShadow lists for layered depth effects
- Use
dart:ui canvas operations for grain overlays and mesh gradients
// Glassmorphism card
ClipRRect(
borderRadius: BorderRadius.circular(20),
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 15, sigmaY: 15),
child: Container(
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.1),
borderRadius: BorderRadius.circular(20),
border: Border.all(color: Colors.white.withOpacity(0.2)),
),
child: content,
),
),
)
What to NEVER Do
- NEVER use default Material theme without customization
- NEVER use only
Scaffold + ListView + Card with zero styling
- NEVER rely solely on Material default colors (purple/teal)
- NEVER ignore dark mode support
- NEVER skip animations entirely — Flutter's animation system is its superpower
- NEVER hardcode sizes — use
MediaQuery, LayoutBuilder, Flexible, Expanded
- NEVER use generic placeholder patterns that look like every other Flutter tutorial
- NEVER ignore platform conventions (iOS users expect Cupertino patterns)
Package Recommendations
| Purpose |
Package |
Usage |
| Fonts |
google_fonts |
Typography |
| Icons |
flutter_svg, hugeicons, phosphor_flutter |
Custom icon sets |
| Animation |
flutter_animate, lottie, rive |
Complex animations |
| Charts |
fl_chart, syncfusion_flutter_charts |
Data visualization |
| Effects |
shimmer, flutter_blurhash |
Loading & image effects |
| Layout |
flutter_staggered_grid_view |
Masonry/staggered grids |
| Navigation |
go_router, auto_route |
Declarative routing |
| State |
flutter_riverpod, flutter_bloc |
State management |
| Images |
cached_network_image, extended_image |
Image loading & caching |
Delivery Format
When building Flutter UI:
- Single widget/screen: Provide complete
.dart file with imports
- Multi-screen feature: Provide folder structure + all files
- Full app: Provide
pubspec.yaml + complete lib/ structure
- Always include
pubspec.yaml dependencies when using external packages
- Code must compile and run — no pseudo-code or incomplete snippets
- Include comments explaining non-obvious design decisions
Quality Checklist
Before delivering Flutter UI code, verify:
Remember: Flutter gives you a pixel-perfect canvas with 120fps animations. Don't hold back — show what can truly be created when committing fully to a distinctive vision.
1---2name: flutter-frontend-design3description: Create distinctive, production-grade Flutter mobile & web UI with high design quality. Use this skill when the user asks to build Flutter screens, widgets, components, dashboards, or full apps. Generates creative, polished Dart/Flutter code that avoids generic AI aesthetics and follows Flutter/Material/Cupertino best practices.4license: MIT5---67# Flutter Frontend Design Skill89This skill guides creation of distinctive, production-grade Flutter interfaces that avoid generic "AI slop" aesthetics. Implement real working Flutter/Dart code with exceptional attention to aesthetic details and creative choices.1011The user provides Flutter UI requirements: a screen, widget, component, or full app to build. They may include context about the purpose, audience, platform targets, or technical constraints.1213## Design Thinking (Before Coding)1415Before writing any Dart code, understand the context and commit to a BOLD aesthetic direction:1617- **Purpose**: What problem does this interface solve? Who uses it? Mobile-first? Tablet? Web?18- **Tone**: Pick a strong direction: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, glassmorphism, neumorphism, claymorphism, etc.19- **Platform**: Material 3, Cupertino, or custom design system? Adaptive UI?20- **Constraints**: State management (Riverpod, Bloc, Provider, GetX), navigation (GoRouter, auto_route), target platforms.21- **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?2223**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work — the key is intentionality, not intensity.2425## Flutter Architecture Patterns2627Always follow these Flutter-specific patterns:2829### Widget Structure30```31lib/32├── main.dart33├── app.dart # MaterialApp / CupertinoApp config34├── core/35│ ├── theme/36│ │ ├── app_theme.dart # ThemeData definitions37│ │ ├── app_colors.dart # Color constants & extensions38│ │ ├── app_typography.dart # TextStyle definitions39│ │ └── app_spacing.dart # Spacing constants40│ ├── constants/41│ └── utils/42├── features/43│ └── feature_name/44│ ├── presentation/45│ │ ├── screens/46│ │ ├── widgets/47│ │ └── controllers/48│ ├── domain/49│ └── data/50└── shared/51 └── widgets/ # Reusable custom widgets52```5354### State Management55- Use `StatefulWidget` for simple local state56- Recommend Riverpod or Bloc for complex state57- Always separate UI from business logic58- Use `ValueNotifier` / `ChangeNotifier` for lightweight reactive patterns5960### Responsive Design61```dart62// Always think responsive63LayoutBuilder(64 builder: (context, constraints) {65 if (constraints.maxWidth > 1200) return _desktopLayout();66 if (constraints.maxWidth > 600) return _tabletLayout();67 return _mobileLayout();68 },69)70```7172## Flutter Aesthetics Guidelines7374### Typography75- **NEVER** use default Material font (Roboto) without customization76- Use Google Fonts package (`google_fonts`) for distinctive typography77- Pair a bold display font with a refined body font78- Examples of strong pairings:79 - Display: `Playfair Display` / Body: `Source Sans Pro`80 - Display: `Space Grotesk` / Body: `DM Sans`81 - Display: `Cormorant Garamond` / Body: `Fira Sans`82 - Display: `Sora` / Body: `Inter` (when Inter fits the design)83 - Display: `Clash Display` / Body: `Satoshi`84- Define ALL text styles in `AppTypography` class using `TextTheme` extensions8586### Color & Theme87- Define colors using `ColorScheme.fromSeed()` or custom `ColorScheme`88- Use `ThemeExtension<T>` for custom color properties beyond Material89- Support BOTH light and dark themes from the start90- CSS variables equivalent → Dart constants + `Theme.of(context).extension<T>()`91- Dominant colors with sharp accents outperform timid, evenly-distributed palettes9293```dart94// Example: Strong color system95class AppColors {96 // Primary palette97 static const primary = Color(0xFF1A1A2E);98 static const accent = Color(0xFFE94560);99 static const surface = Color(0xFF16213E);100 static const background = Color(0xFF0F3460);101102 // Semantic colors103 static const success = Color(0xFF00C897);104 static const warning = Color(0xFFFFB800);105 static const error = Color(0xFFFF4757);106107 // Gradients108 static const heroGradient = LinearGradient(109 colors: [Color(0xFF667eea), Color(0xFF764ba2)],110 begin: Alignment.topLeft,111 end: Alignment.bottomRight,112 );113}114```115116### Motion & Animation117Flutter excels at animation. Use it:118119- **Implicit animations**: `AnimatedContainer`, `AnimatedOpacity`, `AnimatedScale`, `AnimatedSlide`, `AnimatedSwitcher`120- **Hero animations**: For screen transitions with shared elements121- **Staggered animations**: Use `Interval` with `AnimationController` for orchestrated reveals122- **Micro-interactions**: `GestureDetector` + `AnimatedScale` for tap feedback123- **Page transitions**: Custom `PageRouteBuilder` with `SlideTransition`, `FadeTransition`, `ScaleTransition`124- **Lottie**: For complex illustrations and loading states (`lottie` package)125- **Rive**: For interactive vector animations (`rive` package)126127```dart128// Staggered list animation example129class StaggeredListItem extends StatelessWidget {130 final int index;131 final Animation<double> animation;132133 Widget build(BuildContext context) {134 return SlideTransition(135 position: Tween<Offset>(136 begin: const Offset(0, 0.3),137 end: Offset.zero,138 ).animate(CurvedAnimation(139 parent: animation,140 curve: Interval(141 index * 0.1,142 (index * 0.1) + 0.4,143 curve: Curves.easeOutCubic,144 ),145 )),146 child: FadeTransition(147 opacity: animation,148 child: child,149 ),150 );151 }152}153```154155### Spatial Composition156- Use `SliverAppBar` with `FlexibleSpaceBar` for immersive scroll effects157- `CustomScrollView` with mixed `Sliver` widgets for complex layouts158- `Stack` + `Positioned` for overlapping elements159- `Transform` for rotation, skew, perspective effects160- `ClipPath` / `CustomClipper` for non-rectangular shapes161- `CustomPaint` / `CustomPainter` for unique backgrounds and decorative elements162163### Backgrounds & Visual Details164- `ShaderMask` for gradient text and masked effects165- `BackdropFilter` with `ImageFilter.blur` for glassmorphism166- `CustomPainter` for geometric patterns, noise textures, decorative elements167- `DecoratedBox` with complex `BoxDecoration` (gradients, shadows, borders)168- `Container` with `BoxShadow` lists for layered depth effects169- Use `dart:ui` canvas operations for grain overlays and mesh gradients170171```dart172// Glassmorphism card173ClipRRect(174 borderRadius: BorderRadius.circular(20),175 child: BackdropFilter(176 filter: ImageFilter.blur(sigmaX: 15, sigmaY: 15),177 child: Container(178 decoration: BoxDecoration(179 color: Colors.white.withOpacity(0.1),180 borderRadius: BorderRadius.circular(20),181 border: Border.all(color: Colors.white.withOpacity(0.2)),182 ),183 child: content,184 ),185 ),186)187```188189## What to NEVER Do190191- **NEVER** use default Material theme without customization192- **NEVER** use only `Scaffold` + `ListView` + `Card` with zero styling193- **NEVER** rely solely on Material default colors (purple/teal)194- **NEVER** ignore dark mode support195- **NEVER** skip animations entirely — Flutter's animation system is its superpower196- **NEVER** hardcode sizes — use `MediaQuery`, `LayoutBuilder`, `Flexible`, `Expanded`197- **NEVER** use generic placeholder patterns that look like every other Flutter tutorial198- **NEVER** ignore platform conventions (iOS users expect Cupertino patterns)199200## Package Recommendations201202| Purpose | Package | Usage |203|---------|---------|-------|204| Fonts | `google_fonts` | Typography |205| Icons | `flutter_svg`, `hugeicons`, `phosphor_flutter` | Custom icon sets |206| Animation | `flutter_animate`, `lottie`, `rive` | Complex animations |207| Charts | `fl_chart`, `syncfusion_flutter_charts` | Data visualization |208| Effects | `shimmer`, `flutter_blurhash` | Loading & image effects |209| Layout | `flutter_staggered_grid_view` | Masonry/staggered grids |210| Navigation | `go_router`, `auto_route` | Declarative routing |211| State | `flutter_riverpod`, `flutter_bloc` | State management |212| Images | `cached_network_image`, `extended_image` | Image loading & caching |213214## Delivery Format215216When building Flutter UI:2172181. **Single widget/screen**: Provide complete `.dart` file with imports2192. **Multi-screen feature**: Provide folder structure + all files2203. **Full app**: Provide `pubspec.yaml` + complete `lib/` structure2214. Always include `pubspec.yaml` dependencies when using external packages2225. Code must compile and run — no pseudo-code or incomplete snippets2236. Include comments explaining non-obvious design decisions224225## Quality Checklist226227Before delivering Flutter UI code, verify:228229- [ ] Custom `ThemeData` with unique colors and typography230- [ ] Responsive layout (mobile + tablet minimum)231- [ ] At least 2-3 meaningful animations or transitions232- [ ] Dark mode support or explicit dark/light theme233- [ ] Proper widget extraction (no mega-build methods)234- [ ] Performance considerations (`const` constructors, `RepaintBoundary` where needed)235- [ ] Accessibility (`Semantics` widgets, sufficient contrast ratios)236- [ ] Platform-adaptive elements where appropriate237238Remember: Flutter gives you a pixel-perfect canvas with 120fps animations. Don't hold back — show what can truly be created when committing fully to a distinctive vision.