# Dart di Maguyva: graf kode untuk aplikasi Flutter dan Dart

Canonical source: https://maguyva.ai/id/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 mendukung Dart dengan AST, simbol, dan graf, sehingga agen AI dapat menelusuri kelas, mixin, ekstensi, dan konstruktor di seluruh kode Flutter dan Dart.

## Snapshot dukungan

- Tier: Dukungan AST dan simbol
- Pemrograman
- Ekstensi: .dart
- Parsing AST sungguhan untuk pencarian sadar-syntax dan konteks struktural.
- Simbol bernama menggerakkan pencarian semantik dan cross-reference. Navigasi graf tersedia saat ekstraksi relasi diaktifkan.
- Bahasa ini menyumbangkan simbol dan relasi ke pencarian berbasis graf; jenis edge yang didukung bervariasi sesuai konstruk bawaan bahasa tersebut.
- Parsing AST dan ekstraksi simbol sama-sama tersedia.

## Paling cocok untuk

- Aplikasi Flutter yang widget, kelas state, repositori, dan layanannya saling memanggil di banyak berkas.
- Paket Dart yang menambahkan perilaku lewat mixin dan metode ekstensi pada tipe yang didefinisikan di tempat lain.
- Kode Dart sisi server dan baris perintah yang berbagi model dengan klien Flutter.

## Workflow agent

- Menemukan semua pemanggil metode repositori atau layanan sebelum mengubah API-nya.
- Mendaftar kelas yang mengimplementasikan sebuah antarmuka sebelum menambahkan anggota baru.
- Menelusuri bagaimana ketukan pada widget mencapai lapisan jaringan.

## Di mana Dart menjebak alat AI yang dangkal

Dart menyebarkan satu tipe ke beberapa konstruksi. Sebuah kelas bisa mewarisi dari satu kelas dasar, mengimplementasikan beberapa antarmuka, dan mencampurkan perilaku dari mixin lewat `with`. Metode ekstensi menambahkan anggota ke tipe yang didefinisikan di tempat lain, sedangkan konstruktor bernama dan konstruktor `factory` menyembunyikan kelas mana yang sebenarnya dibuat. Pencarian teks menemukan nama, bukan struktur di baliknya.

Maguyva memberikan struktur itu kepada agen, sehingga agen dapat menelusuri perubahan dari widget sampai ke layanan yang menjadi sandarannya.

## Apa yang diekstrak Maguyva dari Dart

Maguyva mencakup berkas `.dart`. Kelas, mixin, dan ekstensi diekstrak sebagai tipe. Preset `functions` di `structural_search` mencakup fungsi, metode, fungsi lokal, lambda, serta konstruktor generatif, `const`, dan `factory`. Tanda tangan mencatat grup parameter posisional opsional dan bernama serta anggota `static`; akhiran `?` dan `!` dihapus dari nama definisi.

Impor menormalkan direktif `import`, `part`, dan `library`, serta membuang klausa `show`, `hide`, dan `as`. Panggilan melalui prefiks impor, seperti `http.get` setelah `import 'package:http/http.dart' as http`, tetap ada di graf.

Penentuan tipe penerima melacak parameter, variabel yang bertipe dan yang diinisialisasi, getter, serta perulangan `for`-`in` atas list, set, dan iterable; `var` dan `dynamic` dianggap sebagai tipe hasil inferensi. Saat anggota warisan diselesaikan, klausa `extends`, `implements`, dan `with` ikut ditelusuri. Graf juga mencatat instansiasi, referensi tipe, pembacaan dan penulisan, serta tepi pengecualian.

## Contoh prompt agen

- "Siapa yang memanggil `CartRepository.addItem`, dan dari widget mana saja?" (`find_symbol`, lalu `dependency_search` incoming)
- "Kelas mana saja yang mengimplementasikan `PaymentGateway`?" (`dependency_search`)
- "Telusuri bagaimana tombol checkout mencapai API pembayaran." (`get_task_context`)

## Batasan yang diketahui

- Sekitar 200 nama dari pustaka inti Dart difilter dari relasi, termasuk pembantu koleksi seperti `map`, `where`, dan `forEach`, metode `Future` dan `Stream` seperti `then` dan `listen`, serta pustaka `dart:`. Gunakan `text_pattern_search` untuk itu.
- Node tanda tangan Dart menyimpan badan fungsi sebagai node saudara, sehingga hasil `structural_search` dapat menumpangkan fungsi lokal atau lambda pada callable yang memuatnya, dan getter serta setter muncul sebagai tanda tangan metode.

## Langkah berikutnya

Hubungkan repositori dengan [panduan memulai cepat](/id/docs/quickstart), lalu periksa matriks dukungan di [halaman kompatibilitas](/id/docs/compatibility). Untuk basis kode seluler lainnya, baca [panduan Kotlin](/id/languages/kotlin) dan [panduan Swift](/id/languages/swift).

## Detail engine

- Dukungan Dart mencakup berkas `.dart`. Kelas, mixin, dan ekstensi adalah tipe; konstruktor mencakup bentuk generatif, `const`, dan `factory`.
- Impor menormalkan direktif `import`, `part`, dan `library`; panggilan melalui prefiks impor tetap ada di graf.
- Penentuan tipe penerima melacak parameter, variabel, getter, dan perulangan `for`-`in`; sekitar 200 nama pustaka inti difilter dari relasi.

## Titik masuk MCP yang berguna

- `find_symbol`: Gunakan untuk kelas widget, repositori, atau layanan saat Anda membutuhkan definisi dan referensinya.
- `dependency_search`: Gunakan penelusuran incoming pada metode repositori atau antarmuka untuk melihat pemanggil dan pengimplementasi sebelum mengubah API.
- `get_task_context`: Gunakan untuk prompt seperti "telusuri bagaimana tombol checkout mencapai API pembayaran".
