# Dart en Maguyva: grafos de código para apps Flutter y Dart

Canonical source: https://maguyva.ai/es/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 admite Dart con AST, símbolos y grafo, para que los agentes de IA sigan clases, mixins, extensiones y constructores en código Flutter y Dart.

## Resumen de soporte

- Nivel: Soporte de AST y símbolos
- Programación
- Extensiones: .dart
- Análisis AST real para búsqueda con reconocimiento de sintaxis y contexto estructural.
- Los símbolos con nombre alimentan la búsqueda semántica y las referencias cruzadas. La navegación por grafo está disponible cuando la extracción de relaciones está habilitada.
- Este lenguaje aporta símbolos y relaciones a la búsqueda basada en grafos; los tipos de arista disponibles varían según sus construcciones nativas.
- Están disponibles tanto el análisis AST como la extracción de símbolos.

## Mejor uso

- Apps Flutter donde widgets, clases de estado, repositorios y servicios se llaman entre sí a través de muchos archivos.
- Paquetes Dart que usan mixins y métodos de extensión para añadir comportamiento a tipos definidos en otro lugar.
- Dart del lado del servidor y de línea de comandos que comparte modelos con un cliente Flutter.

## Flujos de trabajo del agente

- Encontrar todos los llamadores de un método de repositorio o servicio antes de cambiar su API.
- Listar qué clases implementan una interfaz antes de añadirle un miembro.
- Rastrear cómo un toque en un widget llega a la capa de red.

## Dónde Dart hace tropezar a las herramientas de IA superficiales

Dart reparte un mismo tipo entre varias construcciones. Una clase puede heredar de una clase base, implementar varias interfaces e incorporar comportamiento de mixins con `with`. Los métodos de extensión añaden miembros a tipos definidos en otro lugar, y los constructores con nombre y los `factory` ocultan qué clase se construye en realidad. Una búsqueda de texto encuentra los nombres, pero no la estructura que hay detrás.

Maguyva le da esa estructura al agente, para que pueda seguir un cambio desde un widget hasta el servicio del que depende.

## Qué extrae Maguyva en Dart

Maguyva cubre archivos `.dart`. Las clases, los mixins y las extensiones se extraen como tipos. El preset `functions` de `structural_search` cubre funciones, métodos, funciones locales, lambdas y constructores generativos, `const` y `factory`. Las firmas registran grupos de parámetros posicionales y con nombre opcionales y miembros `static`, y los nombres de definición pierden el `?` o `!` final.

Las importaciones normalizan las directivas `import`, `part` y `library` y eliminan sus cláusulas `show`, `hide` y `as`. Una llamada a través de un prefijo de importación, como `http.get` después de `import 'package:http/http.dart' as http`, se mantiene en el grafo.

El tipado de receptores sigue parámetros, variables tipadas e inicializadas, getters y bucles `for`-`in` sobre listas, conjuntos e iterables, y trata `var` y `dynamic` como tipos inferidos. Al resolver miembros heredados se siguen las cláusulas `extends`, `implements` y `with`. El grafo también registra instanciación, referencias de tipo, lecturas y escrituras, y aristas de excepciones.

## Ejemplos de prompts para agentes

- "¿Quién llama a `CartRepository.addItem` y desde qué widgets?" (`find_symbol`, luego `dependency_search` incoming)
- "¿Qué clases implementan `PaymentGateway`?" (`dependency_search`)
- "Rastrea cómo el botón de pago llega a la API de pagos." (`get_task_context`)

## Limitaciones conocidas

- Unos 200 nombres de las bibliotecas principales de Dart se filtran de las relaciones, entre ellos helpers de colecciones como `map`, `where` y `forEach`, métodos de `Future` y `Stream` como `then` y `listen`, y las bibliotecas `dart:`. Usa `text_pattern_search` para encontrarlos.
- Los nodos de firma de Dart guardan el cuerpo como nodo hermano, así que en los resultados de `structural_search` una función local o una lambda puede solaparse con el invocable que la contiene, y los getters y setters aparecen como firmas de método.

## Próximos pasos

Conecta un repositorio con el [inicio rápido](/es/docs/quickstart) y luego revisa la matriz de compatibilidad en la [página de compatibilidad](/es/docs/compatibility). Para otras bases de código móviles, lee la [guía de Kotlin](/es/languages/kotlin) y la [guía de Swift](/es/languages/swift).

## Detalles del motor

- El soporte de Dart cubre `.dart`. Las clases, los mixins y las extensiones son tipos, y los constructores incluyen las formas generativas, `const` y `factory`.
- Las importaciones normalizan las directivas `import`, `part` y `library`, y las llamadas a través de un prefijo de importación se quedan en el grafo.
- El tipado de receptores sigue parámetros, variables, getters y bucles `for`-`in`, y unos 200 nombres de las bibliotecas principales se filtran de las relaciones.

## Puntos de entrada MCP útiles

- `find_symbol`: Úsalo para una clase de widget, repositorio o servicio cuando necesites la definición y las referencias.
- `dependency_search`: Usa el recorrido incoming sobre un método de repositorio o una interfaz para ver llamadores e implementaciones antes de cambiar una API.
- `get_task_context`: Úsalo para prompts como "rastrea cómo el botón de pago llega a la API de pagos".
