# Dart у Maguyva: графи коду для застосунків на Flutter і Dart

Canonical source: https://maguyva.ai/uk/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 підтримує Dart з AST, символами та графом, щоб ШІ-агенти могли простежувати класи, міксини, розширення й конструктори в коді на Flutter і Dart.

## Знімок підтримки

- Рівень: Підтримка AST і символів
- Програмування
- Розширення: .dart
- Справжній розбір AST для пошуку з урахуванням синтаксису та структурного контексту.
- Іменовані символи забезпечують семантичний пошук і перехресні посилання. Навігація графом доступна, коли ввімкнено видобування зв’язків.
- Ця мова додає символи та зв’язки до пошуку з урахуванням графа; підтримувані типи ребер залежать від притаманних їй конструкцій.
- Доступні як розбір AST, так і видобування символів.

## Найкраще підходить

- Застосунки на Flutter, де віджети, класи стану, репозиторії та сервіси викликають одне одного в багатьох файлах.
- Пакети Dart, що додають поведінку через міксини та методи розширення до типів, оголошених деінде.
- Серверний і консольний код на Dart, який спільно використовує моделі з клієнтом на Flutter.

## Робочі процеси агента

- Знайти всі виклики методу репозиторію чи сервісу, перш ніж змінювати його API.
- Перелічити класи, що реалізують інтерфейс, перш ніж додавати до нього новий член.
- Простежити, як натискання у віджеті доходить до мережевого шару.

## Де Dart збиває з пантелику поверхові ШІ-інструменти

Dart розподіляє один тип між кількома конструкціями. Клас може успадковувати від одного базового класу, реалізовувати кілька інтерфейсів і домішувати поведінку з міксинів через `with`. Методи розширення додають члени до типів, оголошених деінде, а іменовані конструктори та конструктори `factory` приховують, який клас насправді створюється. Текстовий пошук знаходить імена, але не структуру за ними.

Maguyva передає цю структуру агентові, і він може простежити зміну від віджета до сервісу, від якого той залежить.

## Що Maguyva витягує з Dart

Maguyva охоплює файли `.dart`. Класи, міксини й розширення витягуються як типи. Пресет `functions` у `structural_search` охоплює функції, методи, локальні функції, лямбди, а також породжувальні конструктори, конструктори `const` і `factory`. Сигнатури фіксують групи необов'язкових позиційних та іменованих параметрів і члени `static`; суфікси `?` і `!` вилучаються з імен визначень.

Імпорти нормалізують директиви `import`, `part` і `library` та відкидають речення `show`, `hide` і `as`. Виклик через префікс імпорту, як-от `http.get` після `import 'package:http/http.dart' as http`, лишається в графі.

Типізація отримувача відстежує параметри, змінні з оголошеним типом та з ініціалізатором, гетери й цикли `for`-`in` за списками, множинами та ітерованими об'єктами; `var` і `dynamic` вважаються виведеними типами. Під час розв'язання успадкованих членів враховуються речення `extends`, `implements` і `with`. Граф також фіксує створення екземплярів, посилання на типи, читання й запис, а також ребра винятків.

## Приклади промптів для агентів

- «Хто викликає `CartRepository.addItem` і з яких віджетів?» (`find_symbol`, потім `dependency_search` за вхідними зв'язками)
- «Які класи реалізують `PaymentGateway`?» (`dependency_search`)
- «Простеж, як кнопка оформлення замовлення доходить до платіжного API.» (`get_task_context`)

## Відомі обмеження

- Близько 200 імен із базових бібліотек Dart відфільтровано зі зв'язків, зокрема допоміжні функції колекцій на кшталт `map`, `where` і `forEach`, методи `Future` і `Stream` на кшталт `then` і `listen`, а також бібліотеки `dart:`. Для них використовуйте `text_pattern_search`.
- Вузли сигнатур Dart зберігають тіло як сусідній вузол, тому в результатах `structural_search` локальна функція чи лямбда може накладатися на об'єкт виклику, що її містить, а гетери й сетери показуються як сигнатури методів.

## Наступні кроки

Під'єднайте репозиторій за [швидким стартом](/uk/docs/quickstart), потім перегляньте матрицю підтримки на [сторінці сумісності](/uk/docs/compatibility). Для інших мобільних кодових баз прочитайте [посібник із Kotlin](/uk/languages/kotlin) і [посібник зі Swift](/uk/languages/swift).

## Деталі рушія

- Підтримка Dart охоплює файли `.dart`. Класи, міксини й розширення є типами; конструктори включають породжувальні, `const` і `factory`.
- Імпорти нормалізують директиви `import`, `part` і `library`; виклики через префікс імпорту лишаються в графі.
- Типізація отримувача відстежує параметри, змінні, гетери й цикли `for`-`in`; близько 200 імен базових бібліотек відфільтровано зі зв'язків.

## Корисні точки входу MCP

- `find_symbol`: Використовуйте для класу віджета, репозиторію чи сервісу, коли потрібні визначення й посилання.
- `dependency_search`: Використовуйте обхід вхідних зв'язків для методу репозиторію чи інтерфейсу, щоб побачити виклики та реалізації перед зміною API.
- `get_task_context`: Використовуйте для промптів на кшталт «простеж, як кнопка оформлення замовлення доходить до платіжного API».
