# Dart w Maguyva: grafy kodu dla aplikacji Flutter i Dart

Canonical source: https://maguyva.ai/pl/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 obsługuje Darta przez AST, symbole i graf, dzięki czemu agenci AI śledzą klasy, mixiny, rozszerzenia i konstruktory w kodzie Fluttera i Darta.

## Migawka wsparcia

- Poziom: Obsługa AST i symboli
- Programowanie
- Rozszerzenia: .dart
- Prawdziwe parsowanie AST dla wyszukiwania świadomego składni i kontekstu strukturalnego.
- Nazwane symbole zasilają wyszukiwanie semantyczne i wzajemne odwołania. Nawigacja po grafie jest dostępna po włączeniu ekstrakcji relacji.
- Ten język dostarcza symbole i relacje do wyszukiwania uwzględniającego graf; obsługiwane typy krawędzi zależą od jego rodzimych konstrukcji.
- Dostępne są zarówno parsowanie AST, jak i ekstrakcja symboli.

## Najlepsze dopasowanie

- Aplikacje Fluttera, w których widżety, klasy stanu, repozytoria i serwisy wywołują się nawzajem w wielu plikach.
- Pakiety Darta, które za pomocą mixinów i metod rozszerzających dodają zachowanie do typów zdefiniowanych gdzie indziej.
- Dart po stronie serwera i w wierszu poleceń, który współdzieli modele z klientem Fluttera.

## Workflow agentów

- Znaleźć wszystkie miejsca wywołujące metodę repozytorium lub serwisu przed zmianą jej API.
- Wypisać klasy implementujące interfejs przed dodaniem do niego składowej.
- Prześledzić, jak dotknięcie w widżecie dociera do warstwy sieciowej.

## Gdzie Dart sprawia kłopot powierzchownym narzędziom AI

Dart rozkłada jeden typ na kilka konstrukcji. Klasa może dziedziczyć po jednej klasie bazowej, implementować kilka interfejsów i włączać zachowanie z mixinów przez `with`. Metody rozszerzające doczepiają składowe do typów zdefiniowanych gdzie indziej, a konstruktory nazwane i `factory` ukrywają, która klasa naprawdę powstaje. Wyszukiwanie tekstowe znajduje nazwy, ale nie strukturę, która za nimi stoi.

Maguyva daje agentowi tę strukturę, więc może on prześledzić zmianę od widżetu aż do serwisu, od którego ten zależy.

## Co Maguyva wyodrębnia w Darcie

Maguyva obejmuje pliki `.dart`. Klasy, mixiny i rozszerzenia są wyodrębniane jako typy. Preset `functions` w `structural_search` obejmuje funkcje, metody, funkcje lokalne, lambdy oraz konstruktory generatywne, `const` i `factory`. Sygnatury zapisują opcjonalne grupy parametrów pozycyjnych i nazwanych oraz składowe `static`, a nazwy definicji tracą końcowe `?` lub `!`.

Importy normalizują dyrektywy `import`, `part` i `library` oraz usuwają ich klauzule `show`, `hide` i `as`. Wywołanie przez prefiks importu, na przykład `http.get` po `import 'package:http/http.dart' as http`, zostaje w grafie.

Typowanie odbiorców śledzi parametry, zmienne typowane i zainicjalizowane, gettery oraz pętle `for`-`in` po listach, zbiorach i obiektach iterowalnych, a `var` i `dynamic` traktuje jako typy wywnioskowane. Przy rozwiązywaniu dziedziczonych składowych śledzone są klauzule `extends`, `implements` i `with`. Graf zapisuje też tworzenie instancji, odwołania do typów, odczyty i zapisy oraz krawędzie wyjątków.

## Przykładowe prompty dla agentów

- „Kto wywołuje `CartRepository.addItem` i z których widżetów?” (`find_symbol`, potem `dependency_search` incoming)
- „Które klasy implementują `PaymentGateway`?” (`dependency_search`)
- „Prześledź, jak przycisk zakupu dociera do API płatności.” (`get_task_context`)

## Znane ograniczenia

- Około 200 nazw z bibliotek podstawowych Darta jest odfiltrowywanych z relacji, w tym pomocnicze funkcje kolekcji, takie jak `map`, `where` i `forEach`, metody `Future` i `Stream`, takie jak `then` i `listen`, oraz biblioteki `dart:`. Do ich wyszukania użyj `text_pattern_search`.
- Węzły sygnatur w Darcie przechowują ciało jako węzeł siostrzany, więc w wynikach `structural_search` funkcja lokalna lub lambda może nakładać się na zawierający ją element wywoływalny, a gettery i settery pojawiają się jako sygnatury metod.

## Kolejne kroki

Podłącz repozytorium za pomocą [szybkiego startu](/pl/docs/quickstart), a potem sprawdź macierz obsługi na [stronie zgodności](/pl/docs/compatibility). W przypadku innych mobilnych baz kodu przeczytaj [przewodnik po Kotlinie](/pl/languages/kotlin) i [przewodnik po Swifcie](/pl/languages/swift).

## Szczegóły silnika

- Obsługa Darta obejmuje `.dart`. Klasy, mixiny i rozszerzenia są typami, a konstruktory obejmują formy generatywne, `const` i `factory`.
- Importy normalizują dyrektywy `import`, `part` i `library`, a wywołania przez prefiks importu zostają w grafie.
- Typowanie odbiorców śledzi parametry, zmienne, gettery i pętle `for`-`in`, a około 200 nazw z bibliotek podstawowych jest odfiltrowywanych z relacji.

## Przydatne punkty wejścia MCP

- `find_symbol`: Użyj go dla klasy widżetu, repozytorium lub serwisu, gdy potrzebujesz definicji i odwołań.
- `dependency_search`: Użyj przejścia incoming na metodzie repozytorium lub interfejsie, aby przed zmianą API zobaczyć wywołujących i implementacje.
- `get_task_context`: Użyj go do promptów takich jak „Prześledź, jak przycisk zakupu dociera do API płatności”.
