# Maguyva 的 Dart 支持：面向 Flutter 与 Dart 应用的代码图谱

Canonical source: https://maguyva.ai/zh-hans/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 解析和符号提取。

## 最适合场景

- 组件、状态类、仓储和服务跨越大量文件相互调用的 Flutter 应用。
- 用 mixin 和扩展方法为别处定义的类型添加行为的 Dart 包。
- 与 Flutter 客户端共享模型的服务端和命令行 Dart 代码。

## 智能体工作流

- 在修改仓储或服务方法的 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-hans/docs/quickstart)连接仓库，然后在[兼容性页面](/zh-hans/docs/compatibility)查看支持矩阵。其他移动端代码库请阅读 [Kotlin 指南](/zh-hans/languages/kotlin)和 [Swift 指南](/zh-hans/languages/swift)。

## 引擎细节

- Dart 支持覆盖 `.dart`。类、mixin 和扩展都是类型，构造函数包括生成式、`const` 和 `factory` 形式。
- 导入会规范化 `import`、`part` 和 `library` 指令，通过导入前缀发起的调用会保留在图谱中。
- 接收者类型推断会跟踪参数、变量、getter 和 `for`-`in` 循环，约 200 个核心库名称会从关系中过滤掉。

## 常用 MCP 入口工具

- `find_symbol`: 需要组件、仓储或服务类的定义和引用时使用它。
- `dependency_search`: 修改 API 之前，对仓储方法或接口使用 incoming 方向遍历，查看调用方和实现者。
- `get_task_context`: 用于“追踪结账按钮如何到达支付 API”这类提示词。
