| 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/ · slide noidung.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 codeconst. 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: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 / const trướ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

Đặng Trí Thanh

Đặng Trí Thanh

Giám đốc Công nghệ · DNT Digital · Giảng viên HNDL
811 Bài viết
15.4k Người theo dõi
120k+ Lượt đọc

Đà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.