SKILL.md
Flutter Development Guide
A practical guide for building cross-platform applications with Flutter 3 and Dart. Focuses on proven patterns, state management, and performance optimization.
Quick Reference
Widget Patterns
Purpose
Component
State management (simple)
StateProvider + ConsumerWidget
State management (complex)
NotifierProvider / Bloc
Async data
FutureProvider / AsyncNotifierProvider
Real-time streams
StreamProvider
Navigation
GoRouter + context.go/push
Responsive layout
LayoutBuilder + breakpoints
List display
ListView.builder
Complex scrolling
CustomScrollView + Slivers
Hooks
HookWidget + useState/useEffect
Forms
Form + TextFormField + validation
Performance Patterns
Purpose
Solution
Prevent rebuilds
const constructors
Selective updates
ref.watch(provider.select(...))
Isolate repaints
RepaintBoundary
Lazy lists
ListView.builder
Heavy computation
compute() isolate
Image caching
cached_network_image
Core Principles
Widget Optimization
- Use
constconstructors wherever possible
- Extract static widgets to separate const classes
- Use
Keyfor list items (ValueKey, ObjectKey)
- Prefer
ConsumerWidgetoverStatefulWidgetfor state
State Management
- Riverpod for dependency injection and simple state
- Bloc/Cubit for event-driven workflows and complex logic
- Never mutate state directly (create new instances)
- Use
select()to minimize rebuilds
Layout
- 8pt spacing increments (8, 16, 24, 32, 48)
- Responsive breakpoints: mobile (<650), tablet (650-1100), desktop (>1100)
- Support all screen sizes with flexible layouts
- Follow Material 3 / Cupertino design guidelines
Performance
- Profile with DevTools before optimizing
- Target <16ms frame time for 60fps
- Use
RepaintBoundaryfor complex animations
- Offload heavy work with
compute()
Checklist
Widget Best Practices
constconstructors on all static widgets
- Proper
Keyon list items
ConsumerWidgetfor state-dependent widgets
- No widget building inside
build()method
- Extract reusable widgets to separate files
State Management
- Immutable state objects
select()for granular rebuilds
- Proper provider scoping
- Dispose controllers and subscriptions
- Handle loading/error states
Navigation
- GoRouter with typed routes
- Auth guards via redirect
- Deep linking support
- State preservation across routes
Performance
- Profile mode testing (
flutter run --profile)
- <16ms frame rendering time
- No unnecessary rebuilds (DevTools check)
- Images cached and resized
- Heavy computation in isolates
Testing
- Widget tests for UI components
- Unit tests for business logic
- Integration tests for user flows
- Bloc tests with
blocTest()
References
Topic
Reference
Widget patterns, const optimization, responsive layout
Riverpod providers, notifiers, async state
Bloc, Cubit, event-driven state
GoRouter setup, routes, deep linking
Feature-based structure, dependencies
Profiling, const optimization, DevTools
Widget tests, integration tests, mocking
iOS/Android/Web specific implementations
Implicit/explicit animations, Hero, transitions
Dio, interceptors, error handling, caching
Form validation, FormField, input formatters
i18n, flutter_localizations, intl
Flutter, Dart, Material Design, and Cupertino are trademarks of Google LLC and Apple Inc. respectively. Riverpod, Bloc, and GoRouter are open-source packages by their respective maintainers.