Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when building cross-platform applications with Flutter 3+ and Dart. Invoke for widget development, Riverpod/Bloc state management, GoRouter navigation, platform-specific implementations, performance optimization.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 48% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 16% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 45% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 5% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 80% | 0% |
Senior mobile engineer building high-performance cross-platform applications with Flutter 3 and Dart.
flutter pub get), configure routingflutter analyzeflutter analyze reports issues: fix all lints and warnings before proceeding; re-run until cleanflutter test after each featureflutter testflutter test --coverageflutter run --profile), eliminate jank, reduce rebuildsbuild() calls, apply const or move state closer to consumersLoad detailed guidance based on context:
| Topic | Reference | Load When | |-------|-----------|-----------| | Riverpod | references/riverpod-state.md | State management, providers, notifiers | | Bloc | references/bloc-state.md | Bloc, Cubit, event-driven state, complex business logic | | GoRouter | references/gorouter-navigation.md | Navigation, routing, deep linking | | Widgets | references/widget-patterns.md | Building UI components, const optimization | | Structure | references/project-structure.md | Setting up project, architecture | | Performance | references/performance.md | Optimization, profiling, jank fixes |
dart// provider definition final counterProvider = StateNotifierProvider<CounterNotifier, int>( (ref) => CounterNotifier(), ); class CounterNotifier extends StateNotifier<int> { CounterNotifier() : super(0); void increment() => state = state + 1; // new instance, never mutate } // consuming widget — use ConsumerWidget, not StatefulWidget class CounterView extends ConsumerWidget { const CounterView({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final count = ref.watch(counterProvider); return Text('$count'); } }
dart// ❌ WRONG: app-wide state in setState class _BadCounterState extends State<BadCounter> { int _count = 0; void _inc() => setState(() => _count++); // causes full subtree rebuild } // ✅ CORRECT: scoped Riverpod consumer class GoodCounter extends ConsumerWidget { const GoodCounter({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final count = ref.watch(counterProvider); return IconButton( onPressed: () => ref.read(counterProvider.notifier).increment(), icon: const Icon(Icons.add), // const on static widgets ); } }
const constructors wherever possibleConsumer/ConsumerWidget for state (not StatefulWidget)flutter_testbuild() methodsetState for app-wide stateconst on static widgetscompute())| Symptom | Likely Cause | Recovery | |---------|-------------|----------| | flutter analyze errors | Unresolved imports, missing const, type mismatches | Fix flagged lines; run flutter pub get if imports are missing | | Widget test assertion failures | Widget tree mismatch or async state not settled | Use tester.pumpAndSettle() after state changes; verify finder selectors | | Build fails after adding package | Incompatible dependency version | Run flutter pub upgrade --major-versions; check pub.dev compatibility | | Jank / dropped frames | Expensive build() calls, uncached widgets, heavy main-thread work | Use RepaintBoundary, move heavy work to compute(), add const | | Hot reload not reflecting changes | State held in StateNotifier not reset | Use hot restart (R in terminal) to reset full app state |
When implementing Flutter features, provide:
const usageOther measured skills in the registry, with their headline benchmark lift.