Flutter Expert

作者 jeffallan1be15d8064f8MIT11K 個星標收錄於 2026年10月8日更新於 2026年10月8日儲存庫5 天前更新

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.

AI 產生的概覽

指導 Flutter 3 與 Dart 開發:元件、Riverpod/Bloc 狀態管理、GoRouter 導覽、測試與效能調校。

功能
提供使用 Dart 建置跨平台 Flutter 應用程式的工作流程與參考指引。內容涵蓋專案建置與相依套件、Riverpod 與 Bloc 狀態管理、GoRouter 導覽與深層連結、可重複使用的 const 最佳化元件、元件與整合測試,以及透過效能分析消除卡頓。產出為實作程式碼,以及 provider 或 Bloc 定義、路由設定與測試結構。
適用情境
適用於建置或擴充 Flutter 3 跨平台應用程式、導入 Riverpod 或 Bloc 狀態管理、設定 GoRouter 導覽、建立自訂元件與動畫、處理平台特定行為,或排查效能與重建問題。也適合修復 flutter analyze 錯誤或失敗的元件測試。
執行需求
需要 Flutter 3+ 與 Dart 工具鏈,包含 flutter 命令列(flutter pub get、flutter analyze、flutter test、flutter run --profile),以及用於效能分析的 Flutter DevTools。不附帶指令碼,僅為說明文件加上六個參考 markdown 檔案。

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)

dart
// provider definition — Notifier, not the legacy StateNotifierfinal counterProvider = NotifierProvider<CounterNotifier, int>(CounterNotifier.new);
class CounterNotifier extends Notifier<int> {  @override  int build() => 0;  void increment() => state = state + 1; // new instance, never mutate}
// consuming widget — use ConsumerWidget, not StatefulWidgetclass 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

dart
// ❌ WRONG: app-wide state in setStateclass _BadCounterState extends State<BadCounter> {  int _count = 0;  void _inc() => setState(() => _count++); // causes full subtree rebuild}
// ✅ CORRECT: scoped Riverpod consumerclass 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 Notifier 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

Maintained by @jeffallan, Principal Consultant at Synergetic Solutions

Documentation

來源與署名

來源:jeffallan/claude-skills位於skills/flutter-expert提交1be15d8

授權條款: MIT

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架