# Dart บน Maguyva: กราฟโค้ดสำหรับแอป Flutter และ Dart

Canonical source: https://maguyva.ai/th/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 สัญลักษณ์ และกราฟ เพื่อให้เอเจนต์ AI ติดตามคลาส มิกซ์อิน ส่วนขยาย และคอนสตรักเตอร์ในโค้ด Flutter และ Dart ได้

## ภาพรวมการรองรับ

- ระดับ: รองรับ AST และสัญลักษณ์
- การเขียนโปรแกรม
- นามสกุลไฟล์: .dart
- การแยกวิเคราะห์ AST จริงสำหรับการค้นหาที่รู้จักไวยากรณ์และบริบทเชิงโครงสร้าง
- สัญลักษณ์ที่มีชื่อป้อนข้อมูลให้การค้นหาเชิงความหมายและการอ้างอิงไขว้ การนำทางกราฟจะใช้งานได้เมื่อเปิดใช้การสกัดความสัมพันธ์
- ภาษานี้ส่งสัญลักษณ์และความสัมพันธ์ไปยังการค้นหาแบบรู้บริบทกราฟ โดยประเภทเอดจ์ที่รองรับจะแตกต่างกันตามโครงสร้างเฉพาะของภาษา
- รองรับทั้งการแยกวิเคราะห์ AST และการสกัดสัญลักษณ์

## เหมาะที่สุดสำหรับ

- แอป Flutter ที่วิดเจ็ต คลาสสถานะ รีโพซิทอรี และเซอร์วิสเรียกกันข้ามหลายไฟล์
- แพ็กเกจ Dart ที่เพิ่มพฤติกรรมผ่านมิกซ์อินและเมธอดส่วนขยายให้กับไทป์ที่ประกาศไว้ที่อื่น
- โค้ด Dart ฝั่งเซิร์ฟเวอร์และบรรทัดคำสั่งที่ใช้โมเดลร่วมกับไคลเอนต์ Flutter

## เวิร์กโฟลว์ของเอเจนต์

- ค้นหาผู้เรียกทั้งหมดของเมธอดในรีโพซิทอรีหรือเซอร์วิสก่อนเปลี่ยน API
- แสดงรายการคลาสที่อิมพลีเมนต์อินเทอร์เฟซก่อนเพิ่มสมาชิกใหม่
- ติดตามว่าการแตะบนวิดเจ็ตไปถึงเลเยอร์เครือข่ายได้อย่างไร

## จุดที่ Dart ทำให้เครื่องมือ AI แบบผิวเผินสะดุด

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` ยังคงอยู่ในกราฟ

การระบุชนิดของรีซีฟเวอร์ติดตามพารามิเตอร์ ตัวแปรที่ประกาศไทป์หรือมีค่าเริ่มต้น getter และลูป `for`-`in` บนลิสต์ เซ็ต และอิเทอเรเบิล โดยถือว่า `var` และ `dynamic` เป็นไทป์ที่อนุมานได้ เมื่อรีโซลฟ์สมาชิกที่สืบทอดมา ระบบจะตามอนุประโยค `extends`, `implements` และ `with` ด้วย กราฟยังบันทึกการสร้างอินสแตนซ์ การอ้างอิงไทป์ การอ่านและเขียน และเส้นเชื่อมของเอกซ์เซปชัน

## ตัวอย่างพรอมต์สำหรับเอเจนต์

- "ใครเรียก `CartRepository.addItem` และเรียกจากวิดเจ็ตไหนบ้าง" (`find_symbol` จากนั้น `dependency_search` ทิศทางขาเข้า)
- "คลาสใดบ้างที่อิมพลีเมนต์ `PaymentGateway`" (`dependency_search`)
- "ติดตามว่าปุ่มชำระเงินไปถึง API การชำระเงินได้อย่างไร" (`get_task_context`)

## ข้อจำกัดที่ทราบ

- ชื่อจากไลบรารีหลักของ Dart ประมาณ 200 ชื่อถูกกรองออกจากความสัมพันธ์ รวมถึงตัวช่วยของคอลเลกชันอย่าง `map`, `where` และ `forEach` เมธอดของ `Future` และ `Stream` อย่าง `then` และ `listen` และไลบรารี `dart:` ใช้ `text_pattern_search` สำหรับสิ่งเหล่านี้
- โหนดซิกเนเจอร์ของ Dart เก็บส่วนเนื้อหาไว้เป็นโหนดพี่น้อง ดังนั้นในผลลัพธ์ของ `structural_search` ฟังก์ชันภายในหรือแลมบ์ดาอาจซ้อนทับกับสิ่งที่เรียกใช้ได้ที่บรรจุมันอยู่ และ getter กับ setter จะแสดงเป็นซิกเนเจอร์ของเมธอด

## ขั้นตอนถัดไป

เชื่อมต่อรีโพซิทอรีด้วย[คู่มือเริ่มต้นใช้งาน](/th/docs/quickstart) แล้วดูตารางการรองรับได้ที่[หน้าความเข้ากันได้](/th/docs/compatibility) สำหรับโค้ดเบสมือถืออื่น ๆ ให้อ่าน[คู่มือภาษา Kotlin](/th/languages/kotlin) และ[คู่มือภาษา Swift](/th/languages/swift)

## รายละเอียดเอนจิน

- การรองรับ Dart ครอบคลุมไฟล์ `.dart` คลาส มิกซ์อิน และส่วนขยายเป็นไทป์ คอนสตรักเตอร์รวมทั้งแบบเจเนอเรทีฟ, `const` และ `factory`
- การอิมพอร์ตปรับไดเรกทีฟ `import`, `part` และ `library` ให้เป็นมาตรฐาน การเรียกผ่านคำนำหน้าการอิมพอร์ตยังคงอยู่ในกราฟ
- การระบุชนิดของรีซีฟเวอร์ติดตามพารามิเตอร์ ตัวแปร getter และลูป `for`-`in` และชื่อจากไลบรารีหลักประมาณ 200 ชื่อถูกกรองออกจากความสัมพันธ์

## จุดเริ่มต้น MCP ที่มีประโยชน์

- `find_symbol`: ใช้กับคลาสวิดเจ็ต รีโพซิทอรี หรือเซอร์วิสเมื่อต้องการนิยามและการอ้างอิง
- `dependency_search`: ใช้การท่องกราฟขาเข้าบนเมธอดของรีโพซิทอรีหรืออินเทอร์เฟซเพื่อดูผู้เรียกและผู้อิมพลีเมนต์ก่อนเปลี่ยน API
- `get_task_context`: ใช้กับพรอมต์อย่าง "ติดตามว่าปุ่มชำระเงินไปถึง API การชำระเงินได้อย่างไร"
