# Dart trên Maguyva: đồ thị mã cho ứng dụng Flutter và Dart

Canonical source: https://maguyva.ai/vi/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 hỗ trợ Dart với AST, ký hiệu và đồ thị, để agent AI có thể lần theo lớp, mixin, extension và constructor trong mã Flutter và Dart.

## Tổng quan hỗ trợ

- Cấp độ: Hỗ trợ AST và symbol
- Lập trình
- Phần mở rộng: .dart
- Phân tích AST thật cho tìm kiếm nhận biết cú pháp và context cấu trúc.
- Các symbol có tên cung cấp dữ liệu cho tra cứu ngữ nghĩa và tham chiếu chéo. Điều hướng graph khả dụng khi bật trích xuất quan hệ.
- Ngôn ngữ này đóng góp symbol và quan hệ cho tìm kiếm nhận biết graph; các loại edge được hỗ trợ thay đổi theo cấu trúc riêng của ngôn ngữ.
- Cả phân tích AST và trích xuất symbol đều khả dụng.

## Phù hợp nhất

- Ứng dụng Flutter có widget, lớp state, repository và service gọi lẫn nhau qua nhiều tệp.
- Gói Dart bổ sung hành vi bằng mixin và phương thức extension cho các kiểu được định nghĩa ở nơi khác.
- Mã Dart phía máy chủ và dòng lệnh dùng chung model với một ứng dụng khách Flutter.

## Workflow agent

- Tìm mọi nơi gọi một phương thức của repository hoặc service trước khi đổi API của nó.
- Liệt kê các lớp triển khai một interface trước khi thêm thành viên mới.
- Lần theo cách một thao tác chạm trên widget đi tới tầng mạng.

## Dart làm khó các công cụ AI hời hợt ở đâu

Dart trải một kiểu ra nhiều cấu trúc. Một lớp có thể kế thừa từ một lớp cơ sở, triển khai nhiều interface và trộn hành vi từ mixin bằng `with`. Phương thức extension thêm thành viên vào kiểu được định nghĩa ở nơi khác, còn constructor có tên và constructor `factory` che giấu lớp nào thực sự được tạo ra. Tìm kiếm văn bản thấy được tên, nhưng không thấy cấu trúc phía sau.

Maguyva trao cấu trúc đó cho agent, để agent có thể lần theo một thay đổi từ widget tới service mà nó phụ thuộc.

## Maguyva trích xuất gì từ Dart

Maguyva bao quát các tệp `.dart`. Lớp, mixin và extension được trích xuất thành kiểu. Preset `functions` trong `structural_search` bao gồm hàm, phương thức, hàm cục bộ, lambda và các constructor sinh, `const` và `factory`. Chữ ký ghi lại nhóm tham số vị trí tùy chọn và tham số có tên cùng các thành viên `static`; hậu tố `?` và `!` bị loại khỏi tên định nghĩa.

Import chuẩn hóa các chỉ thị `import`, `part` và `library`, đồng thời bỏ các mệnh đề `show`, `hide` và `as`. Lời gọi qua tiền tố import, như `http.get` sau `import 'package:http/http.dart' as http`, vẫn nằm trong đồ thị.

Việc gán kiểu cho receiver theo dõi tham số, biến có khai báo kiểu và biến được khởi tạo, getter, cùng vòng lặp `for`-`in` trên list, set và iterable; `var` và `dynamic` được xem là kiểu suy luận. Khi phân giải thành viên kế thừa, các mệnh đề `extends`, `implements` và `with` cũng được lần theo. Đồ thị còn ghi lại việc khởi tạo đối tượng, tham chiếu kiểu, thao tác đọc và ghi, và các cạnh ngoại lệ.

## Ví dụ prompt cho agent

- "Ai gọi `CartRepository.addItem`, và từ những widget nào?" (`find_symbol`, sau đó `dependency_search` theo chiều vào)
- "Những lớp nào triển khai `PaymentGateway`?" (`dependency_search`)
- "Lần theo cách nút thanh toán đi tới API thanh toán." (`get_task_context`)

## Giới hạn đã biết

- Khoảng 200 tên từ thư viện lõi của Dart bị lọc khỏi quan hệ, gồm các helper cho tập hợp như `map`, `where` và `forEach`, các phương thức của `Future` và `Stream` như `then` và `listen`, và các thư viện `dart:`. Dùng `text_pattern_search` cho chúng.
- Nút chữ ký của Dart giữ phần thân như một nút anh em, nên trong kết quả `structural_search`, một hàm cục bộ hoặc lambda có thể chồng lên callable chứa nó, và getter cùng setter xuất hiện như chữ ký phương thức.

## Bước tiếp theo

Kết nối một kho mã bằng [hướng dẫn bắt đầu nhanh](/vi/docs/quickstart), sau đó xem ma trận hỗ trợ trên [trang tương thích](/vi/docs/compatibility). Với các codebase di động khác, hãy đọc [hướng dẫn Kotlin](/vi/languages/kotlin) và [hướng dẫn Swift](/vi/languages/swift).

## Chi tiết engine

- Hỗ trợ Dart bao quát các tệp `.dart`. Lớp, mixin và extension là kiểu; constructor gồm dạng sinh, `const` và `factory`.
- Import chuẩn hóa các chỉ thị `import`, `part` và `library`; lời gọi qua tiền tố import vẫn nằm trong đồ thị.
- Việc gán kiểu cho receiver theo dõi tham số, biến, getter và vòng lặp `for`-`in`; khoảng 200 tên thư viện lõi bị lọc khỏi quan hệ.

## Điểm khởi đầu MCP hữu ích

- `find_symbol`: Dùng cho lớp widget, repository hoặc service khi bạn cần định nghĩa và các tham chiếu.
- `dependency_search`: Dùng duyệt theo chiều vào trên một phương thức repository hoặc interface để thấy nơi gọi và nơi triển khai trước khi đổi API.
- `get_task_context`: Dùng cho prompt như "lần theo cách nút thanh toán đi tới API thanh toán".
