Dart là ngôn ngữ của Flutter: cú pháp quen thuộc kiểu C/Java/JavaScript, có kiểu tĩnh và null safety. Bài này trang bị đủ Dart để viết ứng dụng Flutter.
- Khai báo biến với var, final, const và kiểu
- Dùng chuỗi, điều kiện, vòng lặp, hàm
- Làm việc với List, Map, Set
- Hiểu null safety: ?, !, ??, late
- final
- Gán một lần, giá trị xác định lúc chạy.
- const
- Hằng số xác định lúc biên dịch.
- Null safety
- Kiểu mặc định không nhận null; muốn nhận phải thêm ?.
- Named parameter
- Tham số truyền theo tên, đặt trong {}.
Khái niệm và lý thuyết
Dart có kiểu tĩnh với suy luận kiểu (var), giống TypeScript. Từ Dart 3, sound null safety là bắt buộc: biến kiểu String không bao giờ null; muốn cho phép null phải ghi String?. Trình biên dịch đảm bảo không có lỗi null bất ngờ khi chạy.
Trong Flutter, const rất quan trọng: widget const được tạo một lần và tái sử dụng, giúp giảm việc dựng lại giao diện.
Biến, kiểu và chuỗi
void main() {
var ten = 'An'; // String
int tuoi = 20;
double diem = 8.5;
bool daTotNghiep = false;
final homNay = DateTime.now();
const pi = 3.14159;
print('$ten $tuoi tuổi, điểm ${diem.toStringAsFixed(1)}');
}Điều kiện, vòng lặp, switch
for (var i = 1; i <= 5; i++) print(i);
for (final mon in ['Toán', 'Tin']) print(mon);
String xepLoai(double d) => switch (d) {
>= 8.5 => 'Giỏi',
>= 7 => 'Khá',
>= 5 => 'Trung bình',
_ => 'Yếu',
};Biểu thức switch với pattern (Dart 3) gọn hơn chuỗi if/else.
Hàm và tham số đặt tên
int tong(int a, int b) => a + b;
void chao({required String ten, String loiChao = 'Xin chào'}) {
print('$loiChao $ten');
}
chao(ten: 'Bình'); // giống cách truyền thuộc tính cho widgetCollection
final ds = <int>[3, 1, 2];
ds.add(5);
final chan = ds.where((x) => x.isEven).toList();
final binhPhuong = ds.map((x) => x * x).toList();
final diem = {'toan': 8, 'van': 7}; // Map<String, int>
final mau = {'đỏ', 'xanh'}; // Set
final tatCa = [...ds, if (diem.isNotEmpty) 100, for (var x in ds) x * 10];Null safety
String? email; // có thể null
print(email?.length); // null nếu email null
print(email ?? 'chưa có'); // giá trị thay thế
email ??= Địa chỉ email này đang được bảo vệ từ spam bots, bạn cần kích hoạt Javascript để xem nó. Bạn cần kích hoạt Javascript để xem nó. '; // gán nếu đang null
late final String cauHinh; // khởi tạo sau, trước khi dùngDùng DartPad (dartpad.dev) để thử nhanh mã Dart và cả Flutter ngay trên trình duyệt, không cần cài đặt.
Toán tử ! (ép không null) sẽ ném lỗi nếu giá trị thật sự null. Ưu tiên ?., ?? hoặc kiểm tra if (x != null).
- Viết hàm tính điểm trung bình từ
List<double>và xếp loại bằng switch. - Dùng Map lưu danh bạ tên → số điện thoại, in các số bắt đầu bằng 09.
- Viết hàm có tham số đặt tên
taoTaiKhoan({required String ten, int tuoi = 18}). - Khai báo biến
String?và thử các toán tử ?., ??, ??=.
- Dart có kiểu tĩnh, suy luận kiểu và null safety.
- final/const giúp mã an toàn và Flutter hiệu quả.
- Tham số đặt tên là nền tảng cách dùng widget.
- Collection if/for và spread giúp dựng danh sách gọn.