# Flutter Verify

> Multi-layer verification flow after Flutter code changes: static analysis + tests + widget tree check + runtime error detection. Run after edits before claiming the change works. Triggers (English): verify changes, flutter verify, flutter analyze, widget tree check, runtime error detection, post-edit verification. 改完代碼後的多層驗證流程。靜態分析 + 跑測試 + widget tree 檢查 + runtime error 檢測。 觸發詞（中文）：verify、驗證、確認改動

- Skill: `iml1s/flutter-verify` (Agent Skill)
- Install (CLI): `npx skillmds@latest add iml1s/flutter-verify`
- Raw SKILL.md: https://api.skillmd.com/api/skills/iml1s/flutter-verify/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ImL1s (https://skillmd.com/u/iml1s)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/iml1s/flutter-verify

---


# Flutter 多層驗證

改完代碼後執行此流程，按層依序驗證，任何一層失敗即停止修復。

## 流程

### Layer 0：靜態分析（必跑，無需設備）

用 `mcp__dart__analyze_files` 分析本次改動的文件：

```
analyze_files(roots: [{
  root: "file:///path/to/your/flutter/project",
  paths: [改動的文件列表]
}])
```

**失敗處理**：修復所有 error，重跑直到 "No errors"。

### Layer 1：跑測試（必跑，無需設備）

用 `mcp__dart__run_tests` 跑相關測試：

```
run_tests(roots: [{
  root: "file:///path/to/your/flutter/project",
  paths: [相關測試文件]
}])
```

測試文件定位規則：
- `lib/features/X/...` → `test/features/X/...`
- `lib/core/X/...` → `test/core/X/...`
- `lib/data/X/...` → `test/data/X/...`
- 找不到對應測試文件 → 跳過，不報錯

**失敗處理**：讀取失敗訊息，修復代碼，重跑。

### Layer 2：Widget Tree 檢查（需要設備連接，選跑）

前提：app 已透過 `launch_app` 啟動且 `connect_dart_tooling_daemon` 已連接。

1. `get_runtime_errors(clearRuntimeErrors: true)` — 清除舊錯誤
2. `hot_restart` — 載入最新代碼
3. 等 3 秒讓 app 穩定
4. `get_runtime_errors()` — 檢查有無新 crash
5. `get_widget_tree(summaryOnly: true)` — 確認頁面結構正確

**失敗處理**：有 runtime error 則讀取錯誤訊息，修復代碼，回到 Layer 0。

### Layer 3：視覺驗證（需要設備，僅 UI 改動時）

用 Mobile MCP 截圖確認外觀：
- `mobile_take_screenshot` — 截圖
- 對比參考設計

## 判斷哪些 Layer 要跑

| 改動類型 | Layer 0 | Layer 1 | Layer 2 | Layer 3 |
|---------|---------|---------|---------|---------|
| 純邏輯（UseCase/ViewModel/Repository） | ✓ | ✓ | - | - |
| Widget 改動（不影響外觀） | ✓ | ✓ | ✓ | - |
| UI 外觀改動（顏色/間距/佈局） | ✓ | ✓ | ✓ | ✓ |
| 新增文件 | ✓ | ✓ | - | - |

## 輸出格式

```
驗證結果：
- Layer 0 (analyze): ✅ No errors
- Layer 1 (test): ✅ N tests passed
- Layer 2 (runtime): ✅ No runtime errors / ⏭️ 跳過（無設備連接）
- Layer 3 (visual): ✅ 外觀正確 / ⏭️ 跳過（非 UI 改動）
```

## Related skills

- **`verification-before-completion`** — the universal "do not claim done without evidence" gate. `flutter-verify` is Flutter's concrete tool chain (`flutter analyze` + `flutter test`); apply `verification-before-completion`'s Gate Function + Rationalization Table on top.
- **`test-driven-development`** — TDD pre-verify pattern. `flutter-verify` runs AFTER the green commit; `test-driven-development` produces the failing-then-passing test cycle.

