Flutter Expert 是一份面向 AI 消费的 Flutter/Dart 参考技能,定位为“陷阱与决策”速查资料,供 Claude 等模型在执行任务时读取。它并不提供完整的 Flutter/Dart 文档,而是把开发中容易出错的地方和需要做选择的地方集中列出,帮助 AI 在生成或修改 Flutter 代码时做出更稳妥的判断。
主要能力分为两大部分:关键决策与常见陷阱。
关键决策部分给出四组选择及其适用场景:
- Riverpod 与 BLoC:Riverpod 适合更简单的应用且具备编译期安全;BLoC 适合复杂的事件驱动场景以及团队已有约定。
- StatelessWidget 与 StatefulWidget:默认使用 Stateless;仅当需要局部可变状态(如动画、控制器)时才使用 Stateful。
- go_router 与 Navigator:go_router 用于声明式深链接;Navigator 用于简单的基于栈的导航。
- Feature-first 与 Layer-first:Feature-first 的目录结构形如 lib/features/auth/{data|domain|presentation}。
常见陷阱部分列出多项注意事项:
- 对不可变 widget 始终使用 const 构造函数,可大幅减少重建开销。
- 在异步间隙之后使用 BuildContext 时,widget 可能已卸载,应先检查 mounted。
- 长列表应使用 ListView.builder 而非 ListView(children:[...]),避免一次性构建所有条目。
- 使用 sealed class 实现 Result 模式(Success/Failure),以获得穷尽式 switch。
- Riverpod:在 build 中使用 ref.watch,在回调中使用 ref.read;切勿在回调中使用 ref.watch。
- BLoC:close() 之后绝不再 emit 状态,异步操作中应检查 isClosed。
- 平台通道:始终处理 web/desktop 上的 MissingPluginException。
- TextEditingController 与 AnimationController 必须在 dispose() 中释放。
- MediaQuery.of(context) 会引发重建,若只需尺寸应使用 MediaQuery.sizeOf(context)。
使用方式:该技能被设计为 AI 在执行过程中阅读的参考资料,人类可读的说明可参见 docs/architecture/HIERARCHICAL_PLANNING.md 或 docs/getting-started/ 下的相关主题文档。完整 Flutter/Dart 文档建议使用 Context7 获取。
适用场景:适用于 Flutter/Dart 项目的架构选型、状态管理方案选择、widget 性能优化、导航方案选择、目录结构组织,以及排查异步上下文、控制器释放、平台兼容性等常见问题。
限制:该资料为速查性质,不包含完整 API 文档;未提供安装命令、收费信息、平台支持范围或具体使用步骤,这些内容暂未提供。