Bài viết gần đây
-
-
Dart Cú Pháp Cơ Bản Flutter Buổi 2 | var final const Null Safety
Tháng 7 27, 2026 -
EA MT5 Chậm Vì Multi-Pass | Siêu Cache 1-Pass Buổi 2
Tháng 7 27, 2026 -
Cache & Array MT5 Buổi 2 | Siêu Cache 1-Pass Grid Bot Hedging
Tháng 7 27, 2026 -
Python Dùng Để Làm Gì Trong Tài Chính? (CK, Fintech, Bot Trading)
Tháng 7 26, 2026
| Dart Cú Pháp Cơ Bản Flutter Buổi 2 | var final const Null Safety
Được viết bởi thanhdt vào ngày 27/07/2026 lúc 23:10 | 19 lượt xem
Nguồn:
Day DataPass/Lap trinh Flutter da nen tang/K1-Flutter Co Ban (Level 1)/Buoi 02. Gioi thieu ngon ngu Dart - Cu phap co ban/· slidenoidung.csv.
Buổi 1 Flutter thường làm quen môi trường, project đầu tiên, widget Text/Container cơ bản. Nếu nhảy thẳng sang giao diện mà chưa nắm Dart, bạn sẽ gặp lỗi khó debug: final vs const, null crash, hoặc truyền tham số widget sai tên.
Bài viết trình bày Buổi 2 — Giới thiệu ngôn ngữ Dart & cú pháp cơ bản trong khóa Flutter Cơ Bản (Level 1) tại Hướng Nghiệp Dữ Liệu. Mục tiêu: nền logic trước Buổi 3–4 (Widget tree, layout). Sau khóa, học viên có thể đọc dashboard bot read-only — không cần viết EA, nhưng cần Dart sạch để bind JSON/API.
Đây là bài giáo dục lập trình — không cam kết thu nhập hay kết quả giao dịch.
1. Vì sao Flutter bắt buộc học Dart trước?
| JavaScript (React Native) | Dart (Flutter) | |
|---|---|---|
| Kiểu | Dynamic mạnh | Sound typing + null safety |
| UI | JSX | Widget = class Dart |
| Build | Bridge native | Skia render trực tiếp |
| Dev | Fast Refresh | Hot Reload JIT |
| Release | Bundle JS | AOT native |
Flutter không “nhúng” HTML hay XML — mọi màn hình là class Dart. Hiểu biến, hàm, collection = hiểu nửa đường tới StatelessWidget / StatefulWidget.
graph LR
A[Dart cú pháp] --> B[Widget cơ bản]
B --> C[Layout Row Column]
C --> D[State & form]
D --> E[App fintech read-only]
2. Biến và kiểu dữ liệu
2.1. Khai báo cơ bản
int soBuoi = 12;
double hocPhi = 24000000;
String tenKhoa = 'Flutter Cơ Bản K1';
bool daDangKy = false;
var tuDongSuyLuan = 'HNDL'; // compiler suy ra String
var tiện khi kiểu hiển nhiên; production nên ghi rõ kiểu khi API/public field.
2.2. final vs const — hay nhầm nhất Buổi 2
| Từ khóa | Gán lúc compile? | Gán lúc runtime? | Dùng khi |
|---|---|---|---|
const |
Giá trị hằng số biết trước | Không | const EdgeInsets.all(8) |
final |
— | Một lần khi chạy | final userId = args['id'] |
const maxRetry = 3;
final ngayKhaiGiang = DateTime(2026, 7, 25); // runtime → final
// Widget Flutter — const giúp rebuild nhẹ
const Text('Hotline 0934 145 100');
Quy tắc ngón tay: mọi thứ cố định trong code → const. Giá trị từ API/user → final hoặc biến thường.
2.3. List và Map
List<String> kenhPr = ['HNDL', 'DNT Academy', 'Flutter page'];
Map<String, int> wpPostIds = {
'bias_v6': 7970,
'bot_trading': 8033,
};
// Duyệt
for (final k in kenhPr) {
print(k);
}
k enhPr.add('dnt.python');
List/Map là nền cho JSON decode sau này (List<dynamic> → model class Buổi nâng cao).
3. Sound Null Safety — tránh crash “null”
Dart 2.12+ bắt xử lý null tại compile time.
String? optionalTitle; // có thể null
String requiredTitle = 'Flutter Buổi 2'; // không null
void printTitle(String? t) {
print(t ?? 'Chưa có tiêu đề'); // ?? operator
print(t!.length); // ! — chỉ khi CHẮC không null
}
Trong Flutter, Text(optionalTitle ?? '') an toàn hơn để trống rồi crash lúc user bấm.
Pattern thực tế fintech:
double? balanceFromApi;
final display = balanceFromApi != null
? balanceFromApi!.toStringAsFixed(2)
: '--';
4. Hàm — positional, named, arrow
4.1. Positional và named parameters
void dangKyKhoa(String ten, {required String sdt, String? ghiChu}) {
print('$ten — $sdt ${ghiChu ?? ''}');
}
dangKyKhoa('Flutter K1', sdt: '0934145100');
Named parameters giống cách khai báo Widget:
Container(
padding: const EdgeInsets.all(16),
child: const Text('Dart named params'),
);
4.2. Arrow function
int tongBuoi(int chinh, int phuDao) => chinh + phuDao;
bool duDieuKien(int tuoi) => tuoi >= 18;
Rút gọn hàm một biểu thức — dùng nhiều trong builder: và onPressed:.
5. Cấu trúc điều khiển
enum TrangThaiTaiKhoan { loading, success, error, empty }
TrangThaiTaiKhoan state = TrangThaiTaiKhoan.loading;
String message() {
switch (state) {
case TrangThaiTaiKhoan.loading:
return 'Đang tải...';
case TrangThaiTaiKhoan.success:
return 'Sẵn sàng';
case TrangThaiTaiKhoan.error:
return 'Lỗi mạng — thử lại';
case TrangThaiTaiKhoan.empty:
return 'Chưa có dữ liệu';
}
}
switch + enum exhaustive — compiler báo thiếu case. Pattern này map trực tiếp sang UI: loading spinner, error banner, empty state.
Vòng lặp:
for (var i = 0; i < 3; i++) { /* ... */ }
while (state == TrangThaiTaiKhoan.loading) { /* poll */ }
6. Class Dart — bước đệm tới Widget
class BuoiHoc {
final int stt;
final String title;
final Duration duration;
const BuoiHoc({
required this.stt,
required this.title,
this.duration = const Duration(hours: 2),
});
String get label => 'Buổi $stt: $title';
}
void main() {
const b2 = BuoiHoc(stt: 2, title: 'Dart cú pháp');
print(b2.label);
}
Mọi Widget Flutter (Text, Scaffold, custom widget) là class kế thừa — Buổi 2 class đơn giản giúp Buổi 3 không bị sốc.
7. Liên hệ lộ trình K1 — sau Buổi 2
| Buổi | Chủ đề | Cần Dart gì |
|---|---|---|
| 1 | Giới thiệu Flutter | Chạy project |
| 2 | Dart cú pháp | var/final/const, null, hàm |
| 3 | Widget cơ bản | Class, constructor |
| 4+ | Layout, state | List, Map, enum |
Hướng fintech HNDL: app đọc dashboard bot (read-only) — Buổi 2 List/Map/null safety là nền parse JSON từ API sau này.
8. FAQ
Đã biết Python/JS có bỏ Buổi 2?
Nên học — final/const và null safety khác JS. Bỏ qua dễ lỗi widget rebuild.
Dart có dùng ngoài Flutter?
Có (CLI, server), nhưng khóa tập trung Flutter mobile/web.
Buổi 2 có code Widget không?
Ít — chủ yếu main() console/DartPad. Widget dồn Buổi 3.
Link khóa chính thức?
huongnghieplaptrinhflutter.com · Lịch: lich-khai-giang
9. Tóm tắt
- Dart = ngôn ngữ nền; Flutter Widget = class Dart
- Phân biệt
final/consttrước khi tối ưu UI - Null safety giảm crash production
- Named parameters = cùng pattern với Widget Flutter
- enum + switch = quản lý trạng thái app sạch
Liên hệ & đăng ký: Flutter Cơ Bản — Hướng Nghiệp Lập Trình Flutter · Hotline 0934 145 100 · Zalo 039 791 9841
Flutter Cơ Bản: https://huongnghieplaptrinhflutter.com/ · Hotline 0934 145 100
Weekly Digest — Nhận Bản Tin Hàng Tuần
Nhận các bài viết phân tích kỹ thuật chuyên sâu, thuật toán giao dịch tự động (Trading Bot) và các giải pháp công nghệ mới nhất từ Hướng Nghiệp Dữ Liệu.
Đặng Trí Thanh
Giám đốc Công nghệ · DNT Digital · Giảng viên HNDLĐào tạo và triển khai thực chiến Python, MT5 và hệ thống bot auto trading / IB cho học viên và doanh nghiệp.