New to Claude Skills? Learn how to install them →

jeffallan on GitHub

Flutter Expert

Free

Build high-performance cross-platform apps with Flutter.

Get this skill

Free · Opens the source repo

What Flutter Expert does

Flutter Expert is a comprehensive skill designed for developers who are building cross-platform applications using Flutter 3 and Dart. This skill provides a structured approach to developing applications, focusing on essential aspects like state management, navigation, widget creation, and performance optimization. It serves as a guide for both new and experienced developers looking to enhance their Flutter projects.

The skill outlines a core workflow that begins with project setup, where developers scaffold their Flutter projects, manage dependencies, and configure routing. It emphasizes the importance of implementing state management using popular patterns like Riverpod and Bloc, ensuring that applications remain responsive and maintainable. The skill also details how to create reusable and optimized widgets, which are crucial for achieving high performance in Flutter applications.

Performance optimization is a key focus of this skill, with specific instructions on profiling applications using Flutter DevTools. Developers are encouraged to identify and eliminate jank, reduce unnecessary rebuilds, and follow best practices for managing app state. The skill provides a reference guide that links to detailed documentation on various topics, including state management, navigation, widget patterns, and performance, making it a valuable resource for developers at any stage of their Flutter journey.

Whether you are a seasoned mobile engineer or a newcomer to Flutter, this skill equips you with the knowledge and tools necessary to create efficient and high-quality cross-platform applications. By following the guidelines provided, you can streamline your development process and ensure your applications meet industry standards for performance and usability.

When to use it

Use this skill when developing cross-platform applications with Flutter, particularly when implementing state management, navigation, and performance optimization.

When not to use it

This skill may not be suitable for developers working with Flutter versions earlier than 3 or those who prefer a different state management approach not covered here.

What you can build with it

Setting Up a New Flutter Project

Use this skill to scaffold a new Flutter project, manage dependencies, and configure routing effectively.

Implementing State Management

Follow the guidelines to implement state management using Riverpod or Bloc, ensuring your application remains responsive.

Optimizing App Performance

Utilize the performance optimization techniques provided to profile your app and eliminate jank for a smoother user experience.

How to install Flutter Expert

View source

1. Install with the skills CLI

npx skills add jeffallan/claude-skills/flutter-expert --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by jeffallan

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:

TopicReferenceLoad When
Riverpodreferences/riverpod-state.mdState management, providers, notifiers
Blocreferences/bloc-state.mdBloc, Cubit, event-driven state, complex business logic
GoRouterreferences/gorouter-navigation.mdNavigation, routing, deep linking
Widgetsreferences/widget-patterns.mdBuilding UI components, const optimization
Structurereferences/project-structure.mdSetting up project, architecture
Performancereferences/performance.mdOptimization, 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

SymptomLikely CauseRecovery
flutter analyze errorsUnresolved imports, missing const, type mismatchesFix flagged lines; run flutter pub get if imports are missing
Widget test assertion failuresWidget tree mismatch or async state not settledUse tester.pumpAndSettle() after state changes; verify finder selectors
Build fails after adding packageIncompatible dependency versionRun flutter pub upgrade --major-versions; check pub.dev compatibility
Jank / dropped framesExpensive build() calls, uncached widgets, heavy main-thread workUse RepaintBoundary, move heavy work to compute(), add const
Hot reload not reflecting changesState held in StateNotifier not resetUse 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

Frequently asked questions about Flutter Expert

Similar skills