Trigger: Use when developing Flutter applications — widget patterns, state management (Riverpod/Bloc), navigation, and platform integration.
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
const constructors wherever possible
- Extract static widgets to separate const classes
- Use
Key for list items (ValueKey, ObjectKey)
- Prefer
ConsumerWidget over StatefulWidget for 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
RepaintBoundary for complex animations
- Offload heavy work with
compute()
Checklist
Widget Best Practices
State Management
Navigation
Performance
Testing
References
| Topic |
Reference |
| Widget patterns, const optimization, responsive layout |
Widget Patterns |
| Riverpod providers, notifiers, async state |
Riverpod State Management |
| Bloc, Cubit, event-driven state |
Bloc State Management |
| GoRouter setup, routes, deep linking |
GoRouter Navigation |
| Feature-based structure, dependencies |
Project Structure |
| Profiling, const optimization, DevTools |
Performance Optimization |
| Widget tests, integration tests, mocking |
Testing Strategies |
| iOS/Android/Web specific implementations |
Platform Integration |
| Implicit/explicit animations, Hero, transitions |
Animations |
| Dio, interceptors, error handling, caching |
Networking |
| Form validation, FormField, input formatters |
Forms |
| i18n, flutter_localizations, intl |
Localization |
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.
1---2name: flutter-dev3description: **Trigger**: Use when developing Flutter applications — widget patterns, state management (Riverpod/Bloc), navigation, and platform integration.4---56**Trigger**: Use when developing Flutter applications — widget patterns, state management (Riverpod/Bloc), navigation, and platform integration.78# Flutter Development Guide910A practical guide for building cross-platform applications with Flutter 3 and Dart. Focuses on proven patterns, state management, and performance optimization.1112## Quick Reference1314### Widget Patterns1516| Purpose | Component |17|---------|-----------|18| State management (simple) | `StateProvider` + `ConsumerWidget` |19| State management (complex) | `NotifierProvider` / `Bloc` |20| Async data | `FutureProvider` / `AsyncNotifierProvider` |21| Real-time streams | `StreamProvider` |22| Navigation | `GoRouter` + `context.go/push` |23| Responsive layout | `LayoutBuilder` + breakpoints |24| List display | `ListView.builder` |25| Complex scrolling | `CustomScrollView` + Slivers |26| Hooks | `HookWidget` + `useState/useEffect` |27| Forms | `Form` + `TextFormField` + validation |2829### Performance Patterns3031| Purpose | Solution |32|---------|----------|33| Prevent rebuilds | `const` constructors |34| Selective updates | `ref.watch(provider.select(...))` |35| Isolate repaints | `RepaintBoundary` |36| Lazy lists | `ListView.builder` |37| Heavy computation | `compute()` isolate |38| Image caching | `cached_network_image` |3940## Core Principles4142### Widget Optimization43- Use `const` constructors wherever possible44- Extract static widgets to separate const classes45- Use `Key` for list items (ValueKey, ObjectKey)46- Prefer `ConsumerWidget` over `StatefulWidget` for state4748### State Management49- Riverpod for dependency injection and simple state50- Bloc/Cubit for event-driven workflows and complex logic51- Never mutate state directly (create new instances)52- Use `select()` to minimize rebuilds5354### Layout55- 8pt spacing increments (8, 16, 24, 32, 48)56- Responsive breakpoints: mobile (<650), tablet (650-1100), desktop (>1100)57- Support all screen sizes with flexible layouts58- Follow Material 3 / Cupertino design guidelines5960### Performance61- Profile with DevTools before optimizing62- Target <16ms frame time for 60fps63- Use `RepaintBoundary` for complex animations64- Offload heavy work with `compute()`6566## Checklist6768### Widget Best Practices69- [ ] `const` constructors on all static widgets70- [ ] Proper `Key` on list items71- [ ] `ConsumerWidget` for state-dependent widgets72- [ ] No widget building inside `build()` method73- [ ] Extract reusable widgets to separate files7475### State Management76- [ ] Immutable state objects77- [ ] `select()` for granular rebuilds78- [ ] Proper provider scoping79- [ ] Dispose controllers and subscriptions80- [ ] Handle loading/error states8182### Navigation83- [ ] GoRouter with typed routes84- [ ] Auth guards via redirect85- [ ] Deep linking support86- [ ] State preservation across routes8788### Performance89- [ ] Profile mode testing (`flutter run --profile`)90- [ ] <16ms frame rendering time91- [ ] No unnecessary rebuilds (DevTools check)92- [ ] Images cached and resized93- [ ] Heavy computation in isolates9495### Testing96- [ ] Widget tests for UI components97- [ ] Unit tests for business logic98- [ ] Integration tests for user flows99- [ ] Bloc tests with `blocTest()`100101## References102103| Topic | Reference |104|-------|-----------|105| Widget patterns, const optimization, responsive layout | [Widget Patterns](references/widget-patterns.md) |106| Riverpod providers, notifiers, async state | [Riverpod State Management](references/riverpod-state.md) |107| Bloc, Cubit, event-driven state | [Bloc State Management](references/bloc-state.md) |108| GoRouter setup, routes, deep linking | [GoRouter Navigation](references/gorouter-navigation.md) |109| Feature-based structure, dependencies | [Project Structure](references/project-structure.md) |110| Profiling, const optimization, DevTools | [Performance Optimization](references/performance.md) |111| Widget tests, integration tests, mocking | [Testing Strategies](references/testing.md) |112| iOS/Android/Web specific implementations | [Platform Integration](references/platform-specific.md) |113| Implicit/explicit animations, Hero, transitions | [Animations](references/animations.md) |114| Dio, interceptors, error handling, caching | [Networking](references/networking.md) |115| Form validation, FormField, input formatters | [Forms](references/forms.md) |116| i18n, flutter_localizations, intl | [Localization](references/localization.md) |117118---119120Flutter, 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.