From saaip7-ipdev-mobileapps-skill
Create distinctive, production-grade Flutter mobile applications with Material Design 3. Use this skill when the user asks to build Flutter widgets, screens, pages, or complete mobile apps. Handles UI creation from scratch, design-to-code conversion (Figma/mockups), architecture patterns (Riverpod, BLoC), and Flutter best practices. Generates beautiful, performant Flutter code that avoids generic aesthetics.
How this skill is triggered — by the user, by Claude, or both
Slash command
/saaip7-ipdev-mobileapps-skill:flutter-mobile-designThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill guides creation of distinctive, production-grade Flutter mobile applications using Material Design 3. Implement real working Dart/Flutter code with exceptional attention to aesthetic details, performance, and platform conventions.
This skill guides creation of distinctive, production-grade Flutter mobile applications using Material Design 3. Implement real working Dart/Flutter code with exceptional attention to aesthetic details, performance, and platform conventions.
The user provides mobile app requirements: a widget, screen, feature, or complete application to build. They may include context about the purpose, target platform (iOS/Android), or design references.
Before coding, understand the context and commit to a strong design direction:
Then implement working Flutter code that is:
Use Material 3 type scale with Theme.of(context).textTheme:
Text(
'Headline',
style: Theme.of(context).textTheme.headlineMedium,
)
Type roles: displayLarge/Medium/Small, headlineLarge/Medium/Small, titleLarge/Medium/Small, bodyLarge/Medium/Small, labelLarge/Medium/Small.
For custom fonts, define in TextTheme and apply via ThemeData. Prefer Google Fonts that complement Material 3.
Use Material 3 ColorScheme with semantic colors:
ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.deepPurple,
brightness: Brightness.light,
),
useMaterial3: true,
)
Access colors semantically:
colorScheme.primary / onPrimary - Key actions, FABcolorScheme.secondary / onSecondary - Less prominent actionscolorScheme.tertiary / onTertiary - Contrasting accentscolorScheme.surface / onSurface - Cards, sheets, dialogscolorScheme.error / onError - Error statesSupport dark mode with Brightness.dark variant.
Prefer Material 3 widgets:
FilledButton, FilledButton.tonal, OutlinedButton, TextButtonFloatingActionButton.extended with iconNavigationBar (bottom), NavigationRail (side), NavigationDrawerCard with elevation and surfaceTintColorSearchAnchor for searchSegmentedButton for togglesSlider, Switch, Checkbox with M3 stylingUse Material widget with proper elevation and surfaceTintColor for custom surfaces.
Use purposeful, expressive motion:
// Implicit animations
AnimatedContainer(
duration: const Duration(milliseconds: 300),
curve: Curves.easeOutCubic,
// ...
)
// Hero transitions
Hero(
tag: 'item-$id',
child: Image.network(url),
)
// Page transitions
MaterialPageRoute(
builder: (context) => DetailScreen(),
)
Motion principles:
Duration guidelines: 150ms (small), 300ms (medium), 500ms (large/complex).
Use Material spacing scale (multiples of 4dp):
const EdgeInsets.all(16) // Standard padding
const EdgeInsets.symmetric(horizontal: 24, vertical: 16)
const SizedBox(height: 8) // Vertical spacing
Responsive layouts:
LayoutBuilder(
builder: (context, constraints) {
if (constraints.maxWidth > 600) {
return WideLayout();
}
return NarrowLayout();
},
)
Use Flex, Wrap, GridView.builder for adaptive grids.
// Define providers
final counterProvider = StateNotifierProvider<CounterNotifier, int>((ref) {
return CounterNotifier();
});
class CounterNotifier extends StateNotifier<int> {
CounterNotifier() : super(0);
void increment() => state++;
}
// Use in widget
class CounterWidget extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final count = ref.watch(counterProvider);
return Text('$count');
}
}
class CounterBloc extends Bloc<CounterEvent, int> {
CounterBloc() : super(0) {
on<Increment>((event, emit) => emit(state + 1));
}
}
lib/
├── main.dart
├── app/
│ ├── app.dart # MaterialApp setup
│ └── router.dart # Navigation (go_router)
├── features/
│ └── feature_name/
│ ├── presentation/ # Widgets, screens
│ ├── application/ # Business logic, providers/blocs
│ ├── domain/ # Entities, repositories interfaces
│ └── data/ # Repository implementations, DTOs
├── shared/
│ ├── widgets/ # Reusable widgets
│ └── theme/ # ThemeData, ColorScheme
└── core/
├── constants/
└── utils/
const constructors everywhere possibleListView.builder / GridView.builder for long listscached_network_imageConsumer or BlocBuilderRepaintBoundary for complex animationsSafeArea widget)CupertinoPageRoute for iOS-style transitions// Good: Descriptive, const, proper typing
const EdgeInsets kDefaultPadding = EdgeInsets.all(16);
class ProductCard extends StatelessWidget {
const ProductCard({
super.key,
required this.product,
this.onTap,
});
final Product product;
final VoidCallback? onTap;
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
final colors = theme.colorScheme;
return Card(
clipBehavior: Clip.antiAlias,
child: InkWell(
onTap: onTap,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Widget content
],
),
),
);
}
}
NEVER use generic AI-generated aesthetics like overused font families (Inter, Roboto, Arial, system fonts), cliched color schemes (particularly purple gradients on white backgrounds), predictable layouts and component patterns, and cookie-cutter design that lacks context-specific character.
NEVER generate generic, boilerplate Flutter code. Each implementation should feel crafted for its specific purpose with thoughtful Material Design 3 application and attention to detail.
npx claudepluginhub joshuarweaver/cascade-code-languages-misc-1 --plugin saaip7-ipdev-mobileapps-skillGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Enforces test-driven development: write failing test first, then minimal code to pass. Use when implementing features or bugfixes.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.