Flutter: SDK Đa Nền Tảng Của Google
Flutter là SDK của Google để viết một codebase Dart, biên dịch ra ứng dụng native cho iOS, Android, web, Windows, macOS và Linux. Hot reload theo trạng thái cùng bộ widget riêng, Material và Cupertino, giúp chỉnh giao diện nhanh, không cần tinh chỉnh riêng từng nền tảng. Dùng Flutter khi cần đưa cùng giao diện lên nhiều nền tảng với khả năng kiểm soát UI đến từng pixel; bỏ qua nếu ứng dụng chỉ là lớp vỏ mỏng quanh API native của một nền tảng.
Flutter SDK Là Gì?
Flutter là SDK mã nguồn mở của Google để xây dựng giao diện người dùng cho ứng dụng di động, web và desktop từ một codebase Dart duy nhất. Nó có sẵn bộ widget riêng: Material cho Android và các nền tảng khác, Cupertino cho iOS, cùng kiến trúc rendering theo lớp cho phép kiểm soát trực tiếp những gì được vẽ lên màn hình. SDK này miễn phí, cấp phép BSD-3-Clause, và hoạt động cùng code native sẵn có thay vì bắt buộc viết lại từ đầu, theo README.
Tính Năng Chính Của Flutter
- ✓Một codebase Dart duy nhất biên dịch ra một binary native cho từng nền tảng: mã ARM cho iOS và Android, JS/Wasm cho trình duyệt, và binary x64 hoặc ARM cho desktop, theo README.
- ✓Hot reload theo trạng thái áp code vừa sửa vào ứng dụng đang chạy mà không cần khởi động lại toàn bộ và không mất trạng thái đang có trong bộ nhớ.
- ✓Hai bộ widget dựng sẵn, Material và Cupertino, bao phủ quy ước giao diện của Android/các nền tảng khác và của iOS, cùng khả năng tự xây component giao diện riêng.
- ✓Rendering chạy trên Skia, thư viện đồ hoạ cũng được Chrome và Android dùng, kết hợp với Impeller, trong một kiến trúc theo lớp cho phép kiểm soát từng pixel được vẽ.
- ✓Hỗ trợ FFI để gọi code native trên Android, iOS, macOS và Windows, cùng platform channel cho các API riêng của từng nền tảng khi FFI không phù hợp.
- ✓Có plugin biên tập cho Visual Studio Code và IntelliJ/Android Studio, dù README ghi rằng Flutter hoạt động được với bất kỳ công cụ phát triển nào, hoặc không cần công cụ nào cả.
- ✓Truy cập pub.dev, nơi README mô tả là cung cấp hàng chục nghìn package cho các nền tảng mục tiêu.
Bắt Đầu Với Flutter
README không liệt kê sẵn các lệnh cài đặt. Nó trỏ tới hướng dẫn riêng tại docs.flutter.dev/get-started, tài liệu đầy đủ tại docs.flutter.dev, và một Development wiki tại docs/README.md trong repo. Một điều nên biết trước khi cài từ source: lấy Flutter thẳng từ GitHub thay vì một bản đóng gói sẵn khiến công cụ `flutter` phải tải Dart SDK về từ máy chủ riêng của Google ngay lần chạy đầu tiên, và lặp lại việc tải đó mỗi khi bạn chạy `flutter upgrade`. Dùng SDK này đồng nghĩa với việc đồng ý Điều khoản dịch vụ của Google. Thiết lập để đóng góp code được nói riêng trong CONTRIBUTING.md.
Ai Nên Dùng Flutter?
Flutter phù hợp với một developer hay team cần đưa ứng dụng lên iOS, Android, web và desktop từ một codebase, nhất là khi việc kiểm soát giao diện đến từng pixel quan trọng hơn việc khớp chính xác bộ widget native của từng nền tảng. Nó cũng hợp với team đã có code native muốn giữ lại, vì README mô tả Flutter hoạt động cùng code native bạn đã có qua FFI và platform channel thay vì buộc viết lại. Đây là lựa chọn yếu hơn nếu bạn chỉ nhắm tới đúng một nền tảng và muốn dùng toolkit chính chủ của nền tảng đó từ đầu tới cuối.
Điểm mạnh
- ✓Một codebase Dart duy nhất nhắm tới iOS, Android, web, Windows, macOS và Linux, theo README, thay vì một dự án native riêng cho từng nền tảng.
- ✓Hot reload theo trạng thái giữ bạn ở trong ứng dụng đang chạy khi chỉnh sửa, rút ngắn vòng lặp chỉnh giao diện.
- ✓Có bộ widget riêng, Material và Cupertino, cùng kiến trúc rendering theo lớp cho phép kiểm soát từng pixel thay vì bị giới hạn bởi những gì component native cung cấp.
- ✓FFI và platform channel cho phép gọi vào code native sẵn có trên Android, iOS, macOS và Windows thay vì buộc viết lại.
- ✓Miễn phí, mã nguồn mở, cấp phép BSD-3-Clause, có hướng dẫn đóng góp công khai và truy cập vào hệ sinh thái package của pub.dev.
Những Điều Cần Cân Nhắc Khi Dùng Flutter
- △Flutter tự vẽ giao diện qua Dart thay vì dùng bộ widget native của từng nền tảng, nên để khớp chính xác mọi quy ước giao diện native cần chỉnh tay có chủ đích với widget Material/Cupertino.
- △README không ghi số phiên bản hay tần suất phát hành ngay trong repo; nó dẫn tới docs.flutter.dev/release/breaking-changes và mailing list flutter-announce cho phần đó.
- △Build từ source trên GitHub nghĩa là công cụ `flutter` cần kéo Dart SDK về từ máy chủ của Google ở lần chạy đầu và mỗi lần `flutter upgrade`, gắn với việc chấp nhận Điều khoản dịch vụ của Google.
- △Các bước cài đặt cụ thể và cách dùng CLI hàng ngày không được nêu chi tiết trong README; cả hai đều trỏ ra các trang docs.flutter.dev bên ngoài.
- △README không liệt kê phiên bản OS tối thiểu hay yêu cầu phần cứng cụ thể, nên phần này cần kiểm tra trên docs.flutter.dev thay vì trong repo.
So Sánh Flutter Với Các Framework Khác
Câu Hỏi Thường Gặp
Flutter miễn phí và mã nguồn mở, do Google phát hành theo giấy phép BSD-3-Clause. README mô tả đây là một dự án mã nguồn mở hoàn toàn, chào đón đóng góp qua hướng dẫn trong CONTRIBUTING.md.
Flutter nhắm tới di động (iOS và Android), web, và desktop (Windows, macOS, Linux). README còn liệt kê khả năng nhúng Flutter làm UI toolkit cho một nền tảng tuỳ biến khác.
Ứng dụng Flutter được viết bằng Dart. README mô tả Dart biên dịch ra mã ARM native cho iOS và Android, ra JavaScript và WebAssembly cho web, và ra mã Intel x64/ARM cho desktop.
Flutter hỗ trợ hot reload theo trạng thái, áp thay đổi code vào ứng dụng đang chạy ngay lập tức mà không cần khởi động lại hay mất trạng thái hiện có, theo README.
Rendering của Flutter chạy trên Skia, thư viện đồ hoạ cũng được Chrome và Android dùng, kết hợp cùng Impeller, theo README.
Dùng Flutter SDK đồng nghĩa với việc đồng ý Điều khoản dịch vụ của Google, theo README. Khi cài Flutter từ source trên GitHub thay vì gói dựng sẵn, công cụ `flutter` sẽ liên hệ Google để tải SDK của Dart về ở lần chạy đầu và mỗi lần chạy `flutter upgrade`.
Vấn đề Flutter giải quyết
Đưa cùng một ứng dụng lên iOS, Android, web và desktop thường đòi hỏi các codebase native tách biệt: Swift/UIKit ở đây, Kotlin/Java ở kia, cộng thêm bất cứ thứ gì web và desktop cần, mỗi bên có bộ widget và pipeline build riêng. README của Flutter đóng khung dự án quanh việc gộp tất cả vào một codebase Dart duy nhất và một engine rendering, Skia kết hợp với Impeller, tự vẽ widget riêng thay vì giao cho component UI native của từng hệ điều hành, nhờ vậy cùng một giao diện chạy được ở mọi nơi Flutter nhắm tới.
Trường hợp sử dụng tốt nhất
- •Một team nhỏ ra mắt MVP lên App Store và Google Play cộng thêm bản web từ một codebase Dart duy nhất, thay vì ba dự án native tách biệt.
- •Một sản phẩm cần giao diện đồng nhất giữa các nền tảng, kể cả animation và layout tuỳ biến, dựng trên bộ widget Material/Cupertino riêng của Flutter thay vì component OS native.
- •Nhúng một view Flutter vào trong ứng dụng iOS hoặc Android native sẵn có, vì README mô tả Flutter được thiết kế để hoạt động cùng code bạn đã có, không bắt buộc viết lại toàn bộ.
- •Dựng prototype giao diện nhanh với hot reload, chỉnh layout và tương tác mà không phải khởi động lại ứng dụng sau mỗi lần sửa.
- •Nhúng Flutter làm UI toolkit cho một nền tảng tuỳ biến, điều README liệt kê bên cạnh iOS, Android, web, Windows, macOS và Linux như một mục tiêu được hỗ trợ.
Cách sử dụng
README không hướng dẫn chi tiết cách dùng CLI `flutter` hàng ngày; nó dẫn tới docs.flutter.dev và Development wiki tại docs/README.md cho phần đó. Điều được ghi rõ: có plugin biên tập chính thức cho Visual Studio Code và IntelliJ/Android Studio, và khi ứng dụng đang chạy, hot reload theo trạng thái đẩy các thay đổi code vào ứng dụng mà không cần khởi động lại hay mất trạng thái. Lưu ý build từ source cũng kéo theo việc tải Dart SDK từ máy chủ của Google về ở lần chạy đầu và mỗi lần `flutter upgrade`.
Repo liên quan
Vẫn đang phân vân về flutter?
Một cú bấm sẽ gửi câu hỏi kèm trang này cho AI — xem AI nói gì về flutter.
