# Maguyva 的 Dart 支援：面向 Flutter 與 Dart 應用的程式碼圖譜

Canonical source: https://maguyva.ai/zh-hant/languages/dart

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva 以 AST、符號和圖譜支援 Dart，讓 AI 代理跨越 Flutter 和 Dart 程式碼追蹤類別、mixin、擴充和建構函式。

## 支援概況

- 等級: AST 與符號支援
- 程式語言
- 副檔名: .dart
- 真正的 AST 剖析，支援語法感知搜尋與結構化情境。
- 具名符號支援語意查詢與交叉參照。啟用關係擷取後，即可使用圖譜導覽。
- 這個語言會為圖譜感知搜尋提供符號與關係；支援的邊類型會隨其原生構造而異。
- 同時支援 AST 剖析與符號擷取。

## 最適合的情境

- 元件、狀態類別、repository 和服務跨越大量檔案相互呼叫的 Flutter 應用。
- 用 mixin 和擴充方法為別處定義的型別新增行為的 Dart 套件。
- 與 Flutter 用戶端共享模型的伺服器端和命令列 Dart 程式碼。

## 代理工作流程

- 在修改 repository 或服務方法的 API 之前，找到它的所有呼叫端。
- 在給介面新增成員之前，列出實作了該介面的類別。
- 追蹤元件中的一次點選如何到達網路層。

## Dart 讓淺層 AI 工具栽跟頭的地方

Dart 會把一個型別分散到多種結構裡。一個類別可以繼承一個基底類別、實作多個介面，並透過 `with` 混入 mixin 的行為。擴充方法把成員附加到別處定義的型別上，命名建構函式和 `factory` 建構函式則隱藏了實際建構的是哪個類別。文字搜尋能找到名字，卻找不到名字背後的結構。

Maguyva 把這些結構交給代理，讓它能從元件一路追蹤到所依賴的服務。

## Maguyva 在 Dart 中擷取什麼

Maguyva 支援 `.dart` 檔案。類別、mixin 和擴充會作為型別擷取。`structural_search` 中的 `functions` 預設集涵蓋函式、方法、區域函式、lambda，以及生成式、`const` 和 `factory` 建構函式。簽章會記錄可選的位置參數組和命名參數組以及 `static` 成員，定義名會去掉末尾的 `?` 和 `!`。

匯入會正規化 `import`、`part` 和 `library` 指令，並去掉其中的 `show`、`hide` 和 `as` 子句。透過匯入字首發起的呼叫，例如 `import 'package:http/http.dart' as http` 之後的 `http.get`，會保留在圖譜中。

接收者型別推斷會追蹤參數、帶型別和已初始化的變數、getter，以及遍歷清單、集合和可迭代物件的 `for`-`in` 迴圈，並把 `var` 和 `dynamic` 視為推斷型別。解析繼承成員時會追蹤 `extends`、`implements` 和 `with` 子句。圖譜還會記錄實例化、型別參照、讀寫和例外邊。

## 代理提示範例

- 「誰呼叫了 `CartRepository.addItem`，來自哪些元件？」（先用 `find_symbol`，再用 `dependency_search` 的 incoming 方向）
- 「哪些類別實作了 `PaymentGateway`？」（`dependency_search`）
- 「追蹤結帳按鈕如何到達支付 API。」（`get_task_context`）

## 已知限制

- 約 200 個 Dart 核心函式庫名稱會從關係中過濾掉，包括 `map`、`where` 和 `forEach` 等集合輔助函式，`then` 和 `listen` 等 `Future` 與 `Stream` 方法，以及 `dart:` 函式庫。查詢它們請使用 `text_pattern_search`。
- Dart 的簽章節點把函式體作為兄弟節點儲存，因此在 `structural_search` 的結果中，區域函式或 lambda 可能與包含它的可呼叫物件重疊，getter 和 setter 會顯示為方法簽章。

## 下一步

透過[快速入門](/zh-hant/docs/quickstart)連接儲存庫，然後在[相容性頁面](/zh-hant/docs/compatibility)檢視支援矩陣。其他行動裝置程式碼庫請閱讀 [Kotlin 指南](/zh-hant/languages/kotlin)和 [Swift 指南](/zh-hant/languages/swift)。

## 引擎細節

- Dart 支援涵蓋 `.dart`。類別、mixin 和擴充都是型別，建構函式包括生成式、`const` 和 `factory` 形式。
- 匯入會正規化 `import`、`part` 和 `library` 指令，透過匯入字首發起的呼叫會保留在圖譜中。
- 接收者型別推斷會追蹤參數、變數、getter 和 `for`-`in` 迴圈，約 200 個核心函式庫名稱會從關係中過濾掉。

## 實用的 MCP 進入點

- `find_symbol`: 需要元件、repository 或服務類別的定義和參照時使用它。
- `dependency_search`: 修改 API 之前，對 repository 方法或介面使用 incoming 方向走訪，檢視呼叫端和實作者。
- `get_task_context`: 用於「追蹤結帳按鈕如何到達支付 API」這類提示。
