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 从公开仓库中收录这些内容。

举报或申请下架