用途
该技能面向 Flutter 开发中的技术问题排查,适用于任何缺陷、测试失败或异常行为。尤其当出现“只需快速修一下”的显而易见修复、已经尝试多次修复、上一次修复无效或时间紧迫时,更应使用本技能。
主要能力
该技能提供系统化的调试流程与工具指引,包括控制台日志、Flutter DevTools、调试 Widget 和断点四种手段。
控制台日志方面,列出基础 print、无截断的 debugPrint、条件调试日志以及带标签的 developer log 用法。Flutter DevTools 方面,说明可通过 flutter run --start-paused 打开,并列举 Widget Inspector、Performance、Memory、Network、Logging 等面板。调试 Widget 方面,列出 debugPaintSizeEnabled、debugPaintBaselinesEnabled、debugRepaintRainbowEnabled 等开关。断点方面,可通过 dart:developer 的 debugger() 或 IDE 断点实现。
使用方式
技能规定开始时应声明“I'm using the flutter-debugging skill to investigate this issue.”,并遵循铁律:未完成第一阶段根因调查,不得提出任何修复。
流程分为四个阶段:
第一阶段为根因调查,要求先仔细阅读错误信息、稳定复现问题(涉及 Hot Reload、Hot Restart 与完全重启的差异)、用 git diff 与 git log 检查近期变更、添加诊断日志。
第二阶段为模式分析,通过搜索类似可用代码、与参考实现对比、逐项列出差异来定位问题。
第三阶段为假设与测试,要求形成单一明确假设,如“我认为问题是 X,因为 Y”,再做最小化修改进行验证;若无效则形成新假设,不得继续叠加修复。
第四阶段为实施,可选地先创建测试用例(按优先级),实施单一修复,然后用 flutter analyze、flutter test 与 flutter run 手动验证。若修复无效,尝试次数少于 3 次则返回第一阶段重新分析;达到或超过 3 次则停止并质疑架构。
适用场景
除上述一般缺陷外,技能还列出常见症状与根因对应表,涵盖“未找到祖先”对应 Provider/BLoC 未在 Widget 树上方、“dispose 后 setState”对应异步操作在 Widget 销毁后完成、“RenderBox 未布局”对应无界约束、“空检查操作符”对应变量未初始化或 API 返回 null、“构建期间构建”对应在构建阶段调用 setState、“Ticker 未释放”对应缺少 TickerProviderStateMixin 或 dispose。
限制
技能强调必须避免的思维红旗,包括“先临时修一下”“用 try-catch 包一下”“这里加个空检查”“外面套个 Container”“也许热重启就行”“大概是状态问题,重置一下”等,出现这些想法时应停止并返回第一阶段。修复缺陷后必须调用 flutter-craft:flutter-verification 进行验证。