All skills
jeffallan avatar

/flutter-expert

@efebc44
by jeffallanjeffallan/claude-skills12k stars
1,124

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.

Use this Skill: https://skilld.dev/gh/jeffallan/claude-skills/flutter-expert

This session only. Nothing lands on disk.

SKILL.md

≈58 tokens always: the name and description. ≈1.3k when used: this file. ≈4.5k more on demand in 6 files.

Flutter Expert

Senior mobile engineer building high-performance cross-platform applications with Flutter 3 and Dart.

When to Use This Skill

  • Building cross-platform Flutter applications
  • Implementing state management (Riverpod, Bloc)
  • Setting up navigation with GoRouter
  • Creating custom widgets and animations
  • Optimizing Flutter performance
  • Platform-specific implementations

Core Workflow

  1. Setup — Scaffold project, add dependencies (flutter pub get), configure routing
  2. State — Define Riverpod providers or Bloc/Cubit classes; verify with flutter analyze
    • If flutter analyze reports issues: fix all lints and warnings before proceeding; re-run until clean
  3. Widgets — Build reusable, const-optimized components; run flutter test after each feature
    • If tests fail: inspect widget tree with Flutter DevTools, fix failing assertions, re-run flutter test
  4. Test — Write widget and integration tests; confirm with flutter test --coverage
    • If coverage drops or tests fail: identify untested branches, add targeted tests, re-run before merging
  5. Optimize — Profile with Flutter DevTools (flutter run --profile), eliminate jank, reduce rebuilds
    • If jank persists: check rebuild counts in the Performance overlay, isolate expensive build() calls, apply const or move state closer to consumers

Reference Guide

Load 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

Code Examples

Riverpod Provider + ConsumerWidget (correct pattern)

// 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');
  }
}

Before / After — State Management

// ❌ 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
    );
  }
}

Constraints

MUST DO

  • Use const constructors wherever possible
  • Implement proper keys for lists
  • Use Consumer/ConsumerWidget for state (not StatefulWidget)
  • Follow Material/Cupertino design guidelines
  • Profile with DevTools, fix jank
  • Test widgets with flutter_test

MUST NOT DO

  • Build widgets inside build() method
  • Mutate state directly (always create new instances)
  • Use setState for app-wide state
  • Skip const on static widgets
  • Ignore platform-specific behavior
  • Block UI thread with heavy computation (use compute())

Troubleshooting Common Failures

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

Output Templates

When implementing Flutter features, provide:

  1. Widget code with proper const usage
  2. Provider/Bloc definitions
  3. Route configuration if needed
  4. Test file structure

Documentation

Source: SKILL.md on GitHub

1 alert16d5 checks · Risk CRITICAL
  • Gen Agent Trust Hub16d

    The skill is a legitimate development guide for Flutter and Dart applications. It contains standard coding patterns, configuration guides, and architecture references. The URL flagged by automated scans belongs to the verified author's own repository infrastructure and presents no security risk.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW · No issues

  • Runlayer6mo

    7 files scanned · No issues

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at efebc44. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 months ago.

Steadyupdated 5 months ago
Other metadata
metadata
{
  "author": "https://github.com/Jeffallan",
  "version": "1.1.0",
  "domain": "frontend",
  "triggers": "Flutter, Dart, widget, Riverpod, Bloc, GoRouter, cross-platform",
  "role": "specialist",
  "scope": "implementation",
  "output-format": "code",
  "related-skills": "react-native-expert, test-master, fullstack-guardian"
}
  • flutter
  • dart
  • riverpod
  • bloc
  • gorouter
  • widget
  • state-management
  • cross-platform
  • mobile

README badge

README badge for jeffallan/claude-skills/flutter-expert

Provides patterns and workflow for building cross-platform Flutter apps with Dart, covering Riverpod or Bloc state management, GoRouter navigation, widget optimization, and performance profiling. Use this skill when implementing Flutter 3+ features, custom widgets, or debugging jank and rebuild issues.

Generated from the current SKILL.md.

Does this skill support both Riverpod and Bloc state management?
Yes. The skill covers both Riverpod (with StateNotifierProvider and ConsumerWidget) and Bloc/Cubit patterns. Load the appropriate reference guide based on your state management choice.
What versions of Flutter and Dart does this cover?
Flutter 3+ and Dart. The skill assumes a modern Flutter setup and uses current patterns like const constructors and DevTools profiling.
Does this skill include platform-specific iOS and Android implementations?
Yes. The skill covers platform-specific implementations as part of its core workflow, though detailed guidance is loaded from the performance and project structure references.
Can this skill help with performance optimization and jank fixes?
Yes. The skill includes a dedicated optimization workflow that uses Flutter DevTools profiling, identifies expensive build calls, and applies fixes like RepaintBoundary and const constructors.
Does this skill provide testing guidance?
Yes. Widget and integration testing with flutter_test is part of the core workflow, including test coverage tracking and targeted test additions when coverage drops.

Generated from the current SKILL.md. These answers refresh after source changes.