# Dart-tuki Maguyva-palvelussa: koodigraafit Flutter- ja Dart-sovelluksille

Canonical source: https://maguyva.ai/fi/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 tukee Dartia AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata luokkia, mixinejä, laajennuksia ja konstruktoreita Flutter- ja Dart-koodissa.

## Tukikatsaus

- Taso: AST- ja symbolituki
- Ohjelmointi
- Päätteet: .dart
- Oikea AST-jäsennys syntaksitietoiseen hakuun ja rakenteelliseen kontekstiin.
- Nimetyt symbolit syöttävät semanttista hakua ja ristiviittauksia. Graafinavigointi on käytettävissä, kun suhteiden poiminta on käytössä.
- Tämä kieli tuo symboleja ja suhteita graafia hyödyntävään hakuun; tuetut reunatyypit vaihtelevat kielen omien rakenteiden mukaan.
- Sekä AST-jäsennys että symbolien poiminta ovat käytettävissä.

## Parhaiten sopii

- Flutter-sovellukset, joissa widgetit, tilaluokat, repositoriot ja palvelut kutsuvat toisiaan monen tiedoston yli.
- Dart-paketit, jotka lisäävät mixinien ja laajennusmetodien avulla toimintaa muualla määriteltyihin tyyppeihin.
- Palvelin- ja komentorivi-Dart, joka jakaa malleja Flutter-asiakkaan kanssa.

## Agenttien työnkulut

- Löytää repositorio- tai palvelumetodin kaikki kutsujat ennen sen API:n muuttamista.
- Listata rajapinnan toteuttavat luokat ennen kuin siihen lisätään jäsen.
- Jäljittää, miten widgetin napautus päätyy verkkokerrokseen.

## Missä Dart kampittaa pinnallisia tekoälytyökaluja

Dart levittää yhden tyypin useaan rakenteeseen. Luokka voi periä yhdestä kantaluokasta, toteuttaa useita rajapintoja ja sekoittaa mukaan mixinien toimintaa `with`-avainsanalla. Laajennusmetodit liittävät jäseniä muualla määriteltyihin tyyppeihin, ja nimetyt sekä `factory`-konstruktorit kätkevät, mikä luokka oikeasti rakennetaan. Tekstihaku löytää nimet mutta ei niiden takana olevaa rakennetta.

Maguyva antaa agentille tämän rakenteen, joten se voi seurata muutosta widgetistä palveluun, josta widget riippuu.

## Mitä Maguyva poimii Dartista

Maguyva kattaa `.dart`-tiedostot. Luokat, mixinit ja laajennukset poimitaan tyyppeinä. `structural_search`-työkalun esiasetus `functions` kattaa funktiot, metodit, paikalliset funktiot, lambdat sekä generatiiviset, `const`- ja `factory`-konstruktorit. Allekirjoituksiin tallentuvat valinnaiset sijainti- ja nimettyjen parametrien ryhmät sekä `static`-jäsenet, ja määritelmien nimistä poistetaan loppuun jäävä `?` tai `!`.

Tuonnit normalisoivat `import`-, `part`- ja `library`-direktiivit ja poistavat niiden `show`-, `hide`- ja `as`-lausekkeet. Tuontietuliitteen kautta tehty kutsu, kuten `http.get` tuonnin `import 'package:http/http.dart' as http` jälkeen, jää graafiin.

Vastaanottajan tyypitys seuraa parametreja, tyypitettyjä ja alustettuja muuttujia, gettereitä sekä listojen, joukkojen ja iteroitavien yli kulkevia `for`-`in`-silmukoita ja käsittelee `var`- ja `dynamic`-tyyppejä pääteltyinä. Perittyjä jäseniä selvitettäessä seurataan `extends`-, `implements`- ja `with`-lausekkeita. Graafi tallentaa myös instanssien luonnit, tyyppiviittaukset, luvut ja kirjoitukset sekä poikkeusten kaaret.

## Esimerkkikehotteita agenteille

- ”Kuka kutsuu `CartRepository.addItem`-metodia ja mistä widgeteistä?” (`find_symbol`, sitten `dependency_search` incoming)
- ”Mitkä luokat toteuttavat rajapinnan `PaymentGateway`?” (`dependency_search`)
- ”Jäljitä, miten kassapainike päätyy maksurajapintaan.” (`get_task_context`)

## Tunnetut rajoitukset

- Noin 200 Dartin ydinkirjastojen nimeä suodatetaan pois suhteista, muun muassa kokoelmien apufunktiot kuten `map`, `where` ja `forEach`, `Future`- ja `Stream`-metodit kuten `then` ja `listen` sekä `dart:`-kirjastot. Käytä niihin `text_pattern_search`-työkalua.
- Dartin allekirjoitussolmut pitävät rungon sisarsolmuna, joten `structural_search`-tuloksissa paikallinen funktio tai lambda voi mennä päällekkäin sen sisältävän kutsuttavan kanssa, ja getterit ja setterit näkyvät metodien allekirjoituksina.

## Seuraavat vaiheet

Yhdistä repositorio [pikaoppaan](/fi/docs/quickstart) avulla ja tarkista sitten tukimatriisi [yhteensopivuussivulta](/fi/docs/compatibility). Muissa mobiilikoodikannoissa lue [Kotlin-opas](/fi/languages/kotlin) ja [Swift-opas](/fi/languages/swift).

## Moottorin yksityiskohdat

- Dart-tuki kattaa `.dart`-tiedostot. Luokat, mixinit ja laajennukset ovat tyyppejä, ja konstruktoreihin kuuluvat generatiiviset, `const`- ja `factory`-muodot.
- Tuonnit normalisoivat `import`-, `part`- ja `library`-direktiivit, ja tuontietuliitteen kautta tehdyt kutsut jäävät graafiin.
- Vastaanottajan tyypitys seuraa parametreja, muuttujia, gettereitä ja `for`-`in`-silmukoita, ja noin 200 ydinkirjastojen nimeä suodatetaan pois suhteista.

## Hyödylliset MCP-liittymäkohdat

- `find_symbol`: Käytä sitä widget-, repositorio- tai palveluluokalle, kun tarvitset määritelmän ja viittaukset.
- `dependency_search`: Käytä incoming-läpikäyntiä repositoriometodille tai rajapinnalle nähdäksesi kutsujat ja toteutukset ennen API-muutosta.
- `get_task_context`: Käytä sitä kehotteisiin kuten ”jäljitä, miten kassapainike päätyy maksurajapintaan”.
