Flutter là framework đa nền tảng mạnh mẽ, nhưng rất nhiều người mới chạy được app mà không hiểu app đang chạy như thế nào. Nguyên nhân không nằm ở Flutter, mà nằm ở việc thiếu một quy trình làm việc rõ ràng ngay từ những ngày đầu.
Bài viết này ghi lại Day 2 trong quá trình làm việc với Flutter, tập trung vào cách khởi tạo dự án, chạy app bằng Terminal, và hiểu đúng cấu trúc project Flutter. Mục tiêu không phải “code cho vui”, mà là đặt nền tảng để phát triển ứng dụng thực tế về sau.
1. Vì sao nên tách thư mục project Flutter khỏi SDK?
Một sai lầm phổ biến là tạo project ngay trong thư mục cài Flutter SDK. Cách làm này gây khó quản lý khi số lượng dự án tăng lên.
Cách làm khuyến nghị:
Mỗi ứng dụng Flutter là một thư mục độc lập, không phụ thuộc vào SDK.
Lợi ích:
-
Quản lý nhiều app dễ dàng
-
Phù hợp làm việc nhóm, dùng Git
-
Tránh lỗi khi nâng cấp Flutter SDK
2. Tạo dự án Flutter mới bằng Terminal
Tại thư mục làm việc:
Đến thời điểm này, Flutter đã tạo:
-
Cấu trúc project chuẩn
-
File cấu hình cho Android, iOS, Web, Desktop
-
Thư mục
lib/chứa code chính
👉 Đây là điểm bắt đầu chính xác của mọi ứng dụng Flutter.
3. Chạy ứng dụng Flutter bằng Terminal (không phụ thuộc IDE)
Thay vì bấm nút Run trong IDE, tôi chủ động chạy:
Kết quả thường thấy:
-
Flutter build project
-
Chạy trên thiết bị web hoặc emulator
-
Trả về địa chỉ kiểu:
Port có thể thay đổi sau mỗi lần chạy – điều này hoàn toàn bình thường.
Vì sao nên chạy Flutter bằng Terminal?
-
Hiểu rõ app chạy từ đâu
-
Không phụ thuộc VS Code hay Android Studio
-
Chủ động xử lý khi gặp lỗi môi trường
4. Xử lý thông báo “Trust Author” trong VS Code
Khi mở project Flutter bằng VS Code, hệ thống có thể hỏi:
Do you trust the authors of the files in this folder?
Nếu project do bạn tự tạo, hãy chọn Trust.
Đây là cơ chế bảo mật của VS Code, không phải lỗi Flutter.
5. Hiểu đúng cấu trúc thư mục Flutter
Sau khi tạo project, cấu trúc chuẩn sẽ như sau:
Giải thích nhanh:
-
.dart_tool/: Flutter sinh tự động, không chỉnh sửa -
android/,ios/,web/: wrapper theo nền tảng -
lib/: nơi viết toàn bộ logic ứng dụng -
lib/main.dart: entry point duy nhất của Flutter app
Nếu bạn thấy .dart_tool nhưng chưa thấy main.dart, hãy kiểm tra lại thư mục lib/.
6. main.dart là gì và vai trò thực sự của nó
main.dart không phải nơi để viết toàn bộ ứng dụng.
Vai trò đúng:
-
Khởi động app bằng
runApp() -
Gọi widget gốc
-
Không chứa business logic phức tạp
Ví dụ tối giản:
Nguyên tắc quan trọng khi khởi chạy flutter lần đầu
-
❌ Không nhồi UI
-
❌ Không xử lý logic
-
✅ main.dart chỉ để boot app
Điều này giúp dự án mở rộng bền vững khi app lớn dần.
7. Tổng kết Day 2 – hoàn thành khởi tạo và chạy Flutter
Day 2 không tập trung vào UI hay animation, mà tập trung vào tư duy làm việc đúng với Flutter:
-
Biết tạo project ở đâu
-
Biết chạy app bằng Terminal
-
Hiểu cấu trúc project Flutter
-
Hiểu đúng vai trò của
main.dart
Nếu Day 1 là cài đặt môi trường flutter cho window,
thì Day 2 là lúc làm chủ dự án Flutter.
Phụ lục: Tổng hợp các lệnh Git & Terminal sử dụng trong quá trình thiết lập và khởi tạo dự án Flutter
Phần phụ lục này tổng hợp toàn bộ các lệnh đã sử dụng trong Day 1 – Day 2, kèm theo ý nghĩa và bối cảnh sử dụng. Mục tiêu là để khi đọc lại, người đọc có thể hiểu vì sao dùng lệnh đó, không chỉ biết gõ theo.
A. Các lệnh kiểm tra Git và môi trường hệ thống
git --version
→ Kiểm tra Git đã được cài đặt thành công hay chưa và phiên bản đang sử dụng.
→ Dùng ngay sau khi cài Git cho Windows.
where git
→ Xác định chính xác vị trí Git đang được gọi trong hệ thống.
→ Hữu ích khi nghi ngờ PATH bị sai hoặc tồn tại nhiều bản Git.
B. Các lệnh kiểm tra Flutter SDK
flutter --version
→ Kiểm tra Flutter SDK đã được hệ điều hành nhận diện hay chưa.
→ Nếu lệnh không chạy, nguyên nhân thường là PATH chưa được cấu hình đúng.
where flutter
→ Cho biết Flutter đang được gọi từ thư mục nào.
→ Kết quả hợp lệ thường là:
→ Đây là cách xác nhận chắc chắn nhất rằng PATH đã đúng.
flutter doctor
→ Công cụ chẩn đoán tổng thể môi trường Flutter.
→ Flutter sẽ kiểm tra: SDK, Git, Android toolchain, trình duyệt, IDE.
📌 Lưu ý chuyên môn:
-
Android toolchain có thể cài sau
-
iOS không áp dụng trên Windows
-
Chỉ cần Flutter SDK OK là đủ để bắt đầu phát triển
C. Các lệnh điều hướng thư mục trong Terminal / Git Bash
cd
→ Change Directory – di chuyển giữa các thư mục.
cd /d/projects
→ Di chuyển đến thư mục D:\projects.
→ Trên Git Bash, ổ D được ánh xạ thành /d.
cd clarity_app
→ Di chuyển vào thư mục dự án Flutter vừa tạo.
pwd
→ Print Working Directory – in ra thư mục hiện tại.
→ Dùng để xác nhận đang đứng đúng thư mục project.
ls
→ Liệt kê danh sách file và thư mục hiện tại.
→ Tương đương với dir trong Command Prompt của Windows.
D. Các lệnh khởi tạo dự án Flutter
flutter create clarity_app
→ Tạo một dự án Flutter mới tên là clarity_app.
→ Flutter sẽ tự động sinh cấu trúc project chuẩn cho Android, iOS, Web và Desktop.
E. Các lệnh chạy và kiểm soát ứng dụng Flutter
flutter run
→ Build và chạy ứng dụng Flutter trên thiết bị mặc định.
→ Đây là lệnh cốt lõi trong quá trình phát triển và debug.
flutter devices
→ Liệt kê các thiết bị Flutter có thể chạy ứng dụng.
→ Ví dụ: Chrome (web), Windows (desktop), Android emulator.
flutter run -d chrome
→ Chạy ứng dụng Flutter trực tiếp trên trình duyệt Chrome.
→ Phù hợp cho test nhanh Flutter Web.
flutter run -d windows
→ Chạy ứng dụng Flutter dưới dạng Windows Desktop App.
→ Cần bật hỗ trợ Windows desktop trong Flutter.
F. Các lệnh hỗ trợ khi gặp lỗi build
flutter clean
→ Xoá toàn bộ cache build cũ.
→ Dùng khi gặp lỗi build khó hiểu hoặc sau khi thay đổi cấu hình lớn.
flutter pub get
→ Cài đặt các package được khai báo trong pubspec.yaml.
→ Dùng sau khi thêm dependency mới hoặc khi project báo thiếu package.
G. Phím tắt khi Flutter đang chạy trong Terminal
| Phím | Ý nghĩa |
|---|---|
r |
Hot reload |
R |
Hot restart |
q |
Thoát ứng dụng |
H. Lệnh hệ thống Windows đã sử dụng
sysdm.cpl
→ Mở nhanh cửa sổ System Properties của Windows.
→ Dùng để cấu hình biến môi trường PATH cho Flutter.
🔎 Ghi chú cuối phụ lục
Việc hiểu rõ từng lệnh Terminal không nhằm mục đích “học cho thuộc”, mà để:
- Không phụ thuộc IDE
- Không hoảng khi gặp lỗi môi trường
- Làm chủ vòng đời build – run – debug của Flutter
Khi bạn hiểu vì sao mình gõ một lệnh,
bạn không còn chỉ “làm theo hướng dẫn”,
mà đang thực sự kiểm soát dự án Flutter của mình.




