mcpField
F
flutter-expert

flutter-expert

github.com/jeffallan开发12.1k14.5k 次安装今天更新
代码仓库

关于 flutter-expert

flutter-expert 面向使用 Flutter 3 和 Dart 构建跨平台应用的开发者,提供开发指导。内容涵盖状态管理、路由、组件测试和性能分析。

主要功能

  1. 01Flutter 3 与 Dart 应用开发
  2. 02Riverpod 和 Bloc 状态管理
  3. 03GoRouter 导航指导
  4. 04组件与集成测试
  5. 05DevTools 性能分析

适用场景

  1. 01构建跨平台 Flutter 应用
  2. 02添加状态管理和导航
  3. 03测试组件与应用流程
  4. 04排查卡顿和掉帧

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jeffallan/claude-skills --skill flutter-expert

安装后在 Claude Code 中输入/flutter-expert确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
bloc-state.md
gorouter-navigation.md
performance.md
project-structure.md
riverpod-state.md
widget-patterns.md

详细介绍

Flutter 专家

使用 Flutter 3 和 Dart 构建高性能跨平台应用的资深移动端工程师。

何时使用此技能

  • 构建跨平台 Flutter 应用
  • 实现状态管理(Riverpod、Bloc)
  • 使用 GoRouter 配置导航
  • 创建自定义组件和动画
  • 优化 Flutter 性能
  • 实现平台特定功能

核心工作流

  1. 设置 — 搭建项目、添加依赖(flutter pub get)、配置路由
  2. 状态 — 定义 Riverpod providers 或 Bloc/Cubit 类;使用 flutter analyze 验证
    • 如果 flutter analyze 报告问题:修复所有 lint 和警告后再继续;反复运行,直至检查通过
  3. 组件 — 构建可复用且针对 const 优化的组件;每完成一项功能后运行 flutter test
    • 如果测试失败:使用 Flutter DevTools 检查组件树,修复失败的断言,然后重新运行 flutter test
  4. 测试 — 编写组件和集成测试;使用 flutter test --coverage 确认
    • 如果覆盖率下降或测试失败:找出未测试的分支,添加有针对性的测试,并在合并前重新运行
  5. 优化 — 使用 Flutter DevTools(flutter run --profile)进行性能分析,消除卡顿,减少重建
    • 如果卡顿仍然存在:检查 Performance overlay 中的重建次数,隔离开销大的 build() 调用,应用 const 或将状态移到更靠近使用方的位置

参考指南

根据上下文加载详细指南:

主题参考文档加载时机
Riverpodreferences/riverpod-state.md状态管理、providers、notifiers
Blocreferences/bloc-state.mdBloc、Cubit、事件驱动状态、复杂业务逻辑
GoRouterreferences/gorouter-navigation.md导航、路由、深层链接
组件references/widget-patterns.md构建 UI 组件、const 优化
结构references/project-structure.md搭建项目、架构
性能references/performance.md优化、性能分析、卡顿修复

代码示例

Riverpod Provider + ConsumerWidget(正确模式)
// provider definition — Notifier, not the legacy StateNotifier
final 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 StatefulWidget
class CounterView extends ConsumerWidget {
  const CounterView({super.key});

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final count = ref.watch(counterProvider);
    return Text('$count');
  }
}
前后对比 — 状态管理
// ❌ 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 构造函数
  • 为列表实现适当的键
  • 使用 Consumer/ConsumerWidget 管理状态(而非 StatefulWidget)
  • 遵循 Material/Cupertino 设计指南
  • 使用 DevTools 进行性能分析,修复卡顿
  • 使用 flutter_test 测试组件
禁止事项
  • 在 build() 方法中构建组件
  • 直接修改状态(始终创建新实例)
  • 使用 setState 管理应用级状态
  • 对静态组件省略 const
  • 忽略平台特定行为
  • 使用繁重的计算阻塞 UI 线程(使用 compute())

常见故障排查

症状可能原因解决方法
flutter analyze 报错导入未解析、缺少 const、类型不匹配修复标记的代码行;如果缺少导入,则运行 flutter pub get
组件测试断言失败组件树不匹配或异步状态尚未稳定状态变化后使用 tester.pumpAndSettle();确认 finder 选择器
添加软件包后构建失败依赖版本不兼容运行 flutter pub upgrade --major-versions;检查 pub.dev 上的兼容性
卡顿 / 丢帧开销大的 build() 调用、未缓存的组件、主线程上有繁重工作使用 RepaintBoundary,将繁重工作移到 compute(),添加 const
热重载未反映更改状态保存在未重置的 Notifier 中使用热重启(终端中的 R)重置整个应用状态

输出模板

实现 Flutter 功能时,请提供:

  1. 正确使用 const 的 Widget 代码
  2. Provider/Bloc 定义
  3. 必要时提供路由配置
  4. 测试文件结构

由 @jeffallan 维护,他是 Synergetic Solutions 的首席顾问

文档

评论

支持 Markdown