Flutter là gì? Ưu điểm vượt trội và cơ hội việc làm hấp dẫn

114731

Khi nhắc đến lập trình di động Cross-Platform, chúng ta không thể không nhắc đến 2 nền tảng lớn nhất hiện nay là React Native và Flutter. Dù ra đời sau nhưng Flutter đang vượt lên và trở thành Framework lập trình di động được yêu thích nhất hiện nay. Trong bài viết này, mình sẽ cùng các bạn tìm hiểu về Flutter là gì, các kiến thức cơ bản về Flutter và cách tiếp cận làm quen với Flutter và lộ trình học để trở thành 1 lập trình viên Flutter. Cùng bắt đầu nhé!

Flutter là gì?

Flutter là 1 framework dành cho việc lập trình di động Cross-Platform, nó giúp các lập trình viên có thể tạo ra các ứng dụng chạy trên nhiều nền tảng như Web, Android, iOS (hiện tại và dự định tương lai Flutter còn có thể build được ứng dụng chạy trên cả Window, MacOS và Linux nữa).

Flutter được tạo ra bởi ông lớn Google và được cho ra mắt vào năm 2017, đến nay Flutter được cho phát hành phiên bản mới nhất 3.1.0 vào cuối tháng 5 vừa qua. Chính Google cũng sử dụng Flutter là phương thức chính để tạo ra các ứng dụng cho hệ điều hành Google Fuchsia – 1 hệ điều hành thời gian thực dựa trên năng lực vi hạt nhân.

flutter cơ bản

Flutter sử dụng ngôn ngữ lập trình Dart – một ngôn ngữ hướng đối tượng và tất nhiên cũng được phát triển bởi Google.

Flutter có đầy đủ các tính năng hot nhất hiện nay dành cho lập trình di động: hỗ trợ Hot Reload, Debug Devtool, nhiều IDE support: Android Studio, Visual Code. Các bạn cũng có thể hoàn toàn thử code và tạo ra ứng dụng Flutter mà không cần cài đặt bất cứ thứ gì bằng cách sử dụng Web Editor: https://dartpad.dev/flutter. Tuy nhiên trong series bài viết này mình sẽ hướng dẫn các bạn sử dụng IDE Android Studio, đơn giản vì nó cũng là 1 sản phẩm thuộc về Google khác.

Thành Phần Của Flutter

Flutter là một framework phát triển ứng dụng di động mã nguồn mở được phát triển bởi Google. Nó cho phép các nhà phát triển xây dựng các ứng dụng di động cho cả hệ điều hành iOS và Android chỉ với một codebase duy nhất. Các thành phần chính của Flutter bao gồm:

Flutter SDK

SDK (Software Development Kit) là bộ công cụ phát triển phần mềm cung cấp các thư viện và công cụ cần thiết để xây dựng các ứng dụng Flutter. SDK bao gồm:

  • Dart SDK: Dart là ngôn ngữ lập trình được sử dụng để viết các ứng dụng Flutter. Dart SDK cung cấp trình biên dịch và các công cụ cần thiết để làm việc với Dart.
  • Flutter Engine: Flutter Engine là lõi của Flutter, được viết bằng C++, cung cấp các công cụ cần thiết để render giao diện người dùng và thực hiện các tác vụ như xử lý sự kiện, vẽ đồ họa và quản lý các thành phần UI.
  • Framework: Framework của Flutter được viết bằng Dart, bao gồm các thư viện và widget để xây dựng giao diện người dùng, quản lý trạng thái, điều hướng và nhiều chức năng khác.

Widgets

Widgets là thành phần cơ bản của giao diện người dùng trong Flutter. Mọi thứ trong Flutter đều là widget, từ các thành phần UI cơ bản như nút bấm và văn bản đến các cấu trúc phức tạp như bố cục và hoạt ảnh. Flutter cung cấp hai loại widget chính:

  • Stateless Widgets: Widgets không thay đổi trạng thái trong suốt vòng đời của chúng. Chúng chỉ phụ thuộc vào dữ liệu đầu vào và hiển thị giao diện người dùng dựa trên đó.
  • Stateful Widgets: Widgets có thể thay đổi trạng thái trong suốt vòng đời của chúng. Chúng có thể phản ứng với các sự kiện và cập nhật giao diện người dùng dựa trên trạng thái hiện tại.

Dart

Dart là ngôn ngữ lập trình chính được sử dụng trong lập trình Flutter. Nó được thiết kế để xây dựng các ứng dụng front-end nhanh chóng và hiệu quả. Dart hỗ trợ cả biên dịch JIT (Just-In-Time) cho việc phát triển và biên dịch AOT (Ahead-Of-Time) cho hiệu suất tốt hơn khi triển khai ứng dụng.

Flutter DevTools

Flutter DevTools là bộ công cụ phát triển tích hợp được cung cấp để giúp các nhà phát triển gỡ lỗi, phân tích và tối ưu hóa các ứng dụng Flutter. DevTools bao gồm:

  • Inspector: Công cụ để kiểm tra và chỉnh sửa cấu trúc widget của ứng dụng.
  • Logging: Công cụ để xem và phân tích log từ ứng dụng.
  • Performance: Công cụ để phân tích hiệu suất của ứng dụng, bao gồm theo dõi khung hình và phân tích CPU.

Packages and Plugins

Flutter hỗ trợ việc sử dụng các package và plugin để mở rộng chức năng của ứng dụng. Các package là các thư viện Dart có thể được chia sẻ và sử dụng lại, trong khi các plugin cung cấp giao diện để tương tác với mã gốc (native code) trên các nền tảng iOS và Android.

>> Bài viết liên quan: Hướng dẫn cài đặt Flutter

Khác biệt so với “người anh” Android ?

Chắc hẳn không ít người đang thắc mắc, chẳng phải Google đã có bộ SDK cho di động, có tên gọi Android rồi hay sao. Nhưng với Google, thế giới mobile là quá rộng chỉ với một giải pháp duy nhất là Android. Với việc ra mắt phiên bản beta 1 này, giờ đây họ có trong tay hai bộ SDK cho ứng dụng di động: Android và Flutter. Và điểm khác biệt cơ bản giữa Flutter và Android: tạo ra các ứng dụng chạy trên cả iOS và Android.

Là một bộ SDK đa nền tảng, các ứng dụng Flutter có thể hoạt động trên cả iOS và Android. Nó như một thủ thuật khôn khéo để tương thích được với framework UI trên cả hai hệ điều hành này. Các ứng dụng này không biên dịch trực tiếp với các ứng dụng native của Android và iOS.

Thay vào đó, chúng chạy trên engine render Flutter (được viết bằng C++) và Flutter Framework (được viết bằng Dart, cũng như các ứng dụng Flutter), cả hai bộ này đều được đóng gói cùng với mọi ứng dụng. Sau đó bộ SDK sẽ đóng gói lại vào trong một ứng dụng để sẵn sàng chạy trên mỗi nền tảng. Bạn tạo ra ứng dụng của mình, một engine mới sẽ chạy các đoạn code, và các đoạn code native vừa đủ để nền tảng Flutter chạy trên cả Android và iOS.

Đóng gói cả một engine đi kèm cùng ứng dụng sẽ làm cho kích thước bộ cài đặt lớn hơn hẳn. Trang Hỏi đáp của Flutter cho biết, một ứng dụng “trống” thông thường sẽ chỉ khoảng 6-7MB trên Android, vì vậy dù là ứng dụng nào, phần kích thước tăng lên cũng là rất nhiều. Nhưng lợi ích của việc này là các ứng dụng này sẽ rất nhanh.

Flutter được thiết kế từ đầu để đạt tới tốc độ khung hình 60fps. Trong khi đây không phải là một con số hiếm gặp trên iOS, nhưng với Android, bạn có thể cảm thấy sự khác biệt rõ rệt ngay lập tức. Cũng nhờ việc xuất xưởng cùng với cả một nền tảng cho ứng dụng của mình, các nhà phát triển sẽ tránh được nhiều vấn đề về sự phân mảnh của Android.

Tại sao Flutter lại được yêu thích bởi các lập trình viên?

Theo thống kê từ Stack Overflow, Flutter đạt số điểm 68,8% về mức độ danh mục công nghệ được yêu thích (từ việc bắt đầu và tiếp tục sử dung nó), trong khi đó số điểm của React Native hiện tại chỉ là 57,9%.

Tại sao Flutter lại được yêu thích bởi các lập trình viên?

Còn theo Google Trends, mức độ phổ biến của Flutter gần gấp đôi so với React Native.

compare flutter and react native

Câu hỏi đặt ra ở đây là tại sao Flutter lại được yêu thích và quan tâm đến vậy? Để trả lời cho câu hỏi đó, chúng ta cùng đi vào điểm mạnh của Flutter dưới đây:

  • Đầu tiên phải nhắc đến đó là Flutter chính là con đẻ của Google, 1 ông lớn thực sự với gia tài hệ sinh thái đồ sộ liên quan đến lập trình di động. Đó là hệ điều hành Android, là IDE Android Studio, ngôn ngữ Kotlin, Dart, các thư viện mà gần như ai làm mobile cũng sẽ dùng như Firebase, Google Map, … Và quả thực thì Flutter được lợi rất nhiều từ việc Google cung cấp cho nó rất nhiều các package có sẵn, chỉ cần import vào để sử dụng.
  • Khác với cách tiếp cận của React Native, Flutter được team Google viết mới hoàn toàn bộ render UI. Điều đó có nghĩa là bạn sẽ có 1 bộ UI chung dành cho các nền tảng khác nhau (Flutter đặt tên cho chúng là các widgets), điều này tạo ra sự thống nhất trên các thiết bị giúp có được sự trải nghiệm tốt hơn cho người dùng.
  • Phát triển 1 ứng dụng bằng Flutter thực sự rất nhanh. Dart là 1 ngôn ngữ khá dễ hiểu, trong khi Flutter cũng đã cung cấp bộ Widgets và tài liệu thực sự chi tiết dành cho bạn. 
  • Tối ưu về performance: mặc dù là 1 cross-platform, tuy nhiên Flutter lại mang lại được trải nghiệm về hiệu năng ứng dụng rất tốt. Để so sánh với React Native, chúng ta có thể đi sâu 1 chút vào kiến trúc và quy trình làm việc của 2 framework này.
  • Framework hiện đại và reactive: Dễ dàng tạo giao diện người dùng của bạn với framework hiện đại, reactive của Flutter và tập hợp các platform, layout và widget phong phú. Giải quyết các thách thức giao diện người dùng khó khăn của bạn với các API mạnh mẽ và linh hoạt cho 2D, animation, gesture, hiệu ứng và hơn thế nữa.
  • Truy cập các tính năng và SDK native: Làm cho ứng dụng của bạn trở nên sống động với API của platform, SDK của bên thứ ba và native code. Nó cho phép bạn sử dụng lại mã Java, Swift và ObjC hiện tại của mình và truy cập các tính năng và SDK native trên iOS và Android.
  • Phát triển ứng dụng thống nhất: Flutter có các công cụ và thư viện để giúp bạn dễ dàng đưa ý tưởng của mình vào cuộc sống trên iOS và Android. Nếu bạn chưa có kinh nghiệm phát triển trên thiết bị di động, thì Flutter là một cách dễ dàng và nhanh chóng để xây dựng các ứng dụng di động tuyệt đẹp. Nếu bạn là một nhà phát triển iOS hoặc Android có kinh nghiệm, bạn có thể sử dụng Flutter cho các View của bạn và tận dụng nhiều code Java / Kotlin / ObjC / Swift hiện có của bạn.

quy trình làm việc của react native và flutter

React Native sử dụng JS Bridge để giao tiếp với các native module, đây chính là vị trí thường xuyên gây nghẽn cổ chai trong ứng dụng được viết bằng ngôn ngữ JS này. Flutter thì khác, kiến trúc ngôn ngữ Dart được tạo ra giúp chúng có thể giao tiếp thông qua chính các native interface, tất nhiên nó cũng là 1 dạng bridge, nhưng nó nhanh hơn rất nhiều vì “cầu rộng hơn và lại có nhiều cầu”, yên tâm gần như không bị nghẽn cổ chai được.

Tìm việc làm Flutter được cập nhật mỗi ngày tại đây!

Tất nhiên, Framework hay ngôn ngữ nào cũng có nhược điểm của nó. Flutter dù được Google chống lưng rất nhiều, tốc độ phát triển hiện nay rất tốt tuy nhiên nó cũng không tránh được các vấn đề của nó:

  • Điều đầu tiên đương nhiên là về cộng đồng sử dụng và hỗ trợ. Ra mắt sau nên Flutter hiện nay cũng chưa phải là sự lựa chọn của các công ty hay tập đoàn lớn. Việc làm liên quan đến Flutter còn hạn chế, sẽ phải mất 1 thời gian nữa cùng với sự đầu tư của ông lớn Google thì điều này mới có thể cải thiện tốt lên được.
  • Flutter chưa đủ hoàn thiện để xử lý các dự án phức tạp. Đây là điểm mấu chốt mà các công ty chưa chọn Flutter làm nền tảng để phát triển 1 ứng dụng lớn của mình. Lý do cơ bản là việc Google sinh ra Flutter là dành cho sự tiện lợi, nhanh chóng, rút ngắn thời gian thử nghiệm và tạo ra 1 ứng dụng. Nếu bạn cần thử nghiệm 1 ứng dụng với chi phí và thời gian eo hẹp, hãy chọn Flutter vì nó rất nhanh; sau đó nếu thành công, hãy cân nhắc việc viết lại ứng dụng bằng native code. Những pattern như Flux, Redux nổi tiếng trên React Native chưa cho thấy sự tiện lợi trên Flutter để có thể giải quyết logic phức tạp; trong khi đó BloC – thứ được Google giới thiệu thì lại cho thấy sự khó hiểu, khó học của nó đối với các lập trình viên.

Flutter cho Mobile App – Quá tốt so với phần còn lại

Mấy nay thấy nhiều người quan tâm Flutter nên mình cũng đi tìm hiểu xem sao. Dù chỉ mới tìm hiểu thôi nhưng mình thật sự ấn tượng với Flutter với những điểm sau, tóm tắt ngắn gọn lại cho mọi người tham khảo:

1. Sử dụng DART. Một ngôn ngữ lập trình hướng đối tượng do Google phát triển. DART là một static type language nên nó là AOT (Ahead of Time), compile xong hết rồi mới chạy. Trong khi đó nó cũng là JIT (Just in Time) giống như các dynamic type language. Khi dev thì nó sử dụng JIT để hỗ trợ Hot Load và build release thì dùng AOT để tối ưu hiệu năng như một native code bình thường. Lại magic nữa !!

flutter

2. Ngoài ra DART cũng hướng tới việc trở thành một ngôn ngữ có thể chạy trên nhiều platform khác nhau, nó cũng có máy ảo (VM) làm nhiệm vụ dịch source code sang bytecode như Java. Hiện tại DART có thể transpile ra các ngôn ngữ khác như JS để chạy trên trình duyệt. Cái này không liên quan mobile lắm tuy nhiên đây cũng là 1 ưu điểm lớn của ngôn ngữ này nên không thể bỏ qua.

3. Vậy còn native module ? Khác với JS Bridge, Flutter “nói chuyện” với các native module bằng chính các native interface. Mặc dù vẫn được gọi là “bridge”, tuy nhiên nó nhanh hơn rất nhiều và gân như không bị “thắc cổ chai” như React Native. Ngoài ra các module này được kiến trúc theo “plugin”, các module viết cho Flutter phải tuân thủ các rule trong này. Cá nhân mình thấy viết native module cho Flutter rất tự nhiên, không cần phải học các syntax macro C/C++ như RN.

4. Theo doc của Flutter Engine, có tới 4 threads (runners) được sử dụng trong app: Platform Task Runner, UI Task Runner, GPU Task Runner và IO Task Runner. Các threads này độc lập và không share memory với nhau, chúng giao tiếp với nhau thông qua channels… tới đây ai fan golang sẽ hiểu và rất thích pattern này.

5. Về document: sở hữu bộ doc phải nói là không bỏ sót thứ gì. Đi từ cài đặt, hướng dẫn viết app cơ bản cho tới CI/CD, debug, test và profiling. Bộ profiling của Flutter cũng cực kì hay dùng để đo đạc các chỉ số về performance khá chi tiết.

6. Các ví dụ và kiến trúc ứng dụng: Có hẳn 1 repository trên Github đủ hết các example cho Redux, mvc, mvu… tha hồ quẹo lựa.

flutter

flutter

Với các đặc tính trên và tốc độ phát triển rất nhanh như hiện tại, đây sẽ là lựa chọn hàng đầu cho mobile development. Có lẽ điểm yếu rõ ràng nhất của Flutter hiện nay là… học cái này rồi ở đâu tuyển ?!?

Một Số Ứng Dụng Được Xây Dựng Từ Flutter

Lập trình Flutter đã được sử dụng để phát triển nhiều ứng dụng di động nổi tiếng trên toàn thế giới. Dưới đây là một số ví dụ điển hình:

Google Ads

Google Ads là một ứng dụng quản lý quảng cáo dành cho các nhà quảng cáo Google. Ứng dụng này cho phép người dùng xem hiệu suất quảng cáo, cập nhật ngân sách và chiến dịch, và nhận thông báo quan trọng.

Alibaba

Alibaba, nền tảng thương mại điện tử lớn nhất Trung Quốc, đã sử dụng Flutter để phát triển một số ứng dụng di động của mình. Flutter giúp Alibaba tạo ra trải nghiệm người dùng mượt mà và nhất quán trên cả iOS và Android.

Reflectly

Reflectly là một ứng dụng nhật ký và quản lý căng thẳng cá nhân, sử dụng AI để cung cấp các phân tích và phản hồi cho người dùng. Ứng dụng này được xây dựng hoàn toàn bằng Flutter, mang lại giao diện người dùng đẹp mắt và tương tác mượt mà.

Tencent

Tencent, một trong những công ty công nghệ lớn nhất Trung Quốc, đã sử dụng Flutter để phát triển một số ứng dụng và dịch vụ của mình. Flutter giúp Tencent tiết kiệm thời gian và chi phí phát triển bằng cách duy trì một codebase duy nhất cho cả hai nền tảng.

BMW

BMW đã sử dụng Flutter để phát triển ứng dụng My BMW. Ứng dụng này cung cấp các tính năng như theo dõi xe, điều khiển từ xa, và quản lý bảo dưỡng. Flutter giúp BMW đảm bảo trải nghiệm người dùng nhất quán trên các thiết bị khác nhau.

Cơ hội việc làm lập trình viên Flutter tại Việt Nam

Với sự phát triển mạnh mẽ của công nghệ di động và nhu cầu tạo ra các ứng dụng nhanh chóng và hiệu quả, các công ty ngày càng tìm kiếm những Flutter Developer tài năng. Nhiều công ty, từ các startup đến các tập đoàn lớn, đều ưu tiên sử dụng Flutter để giảm thời gian và chi phí phát triển.

Flutter Developer có lợi thế cạnh tranh lớn trong thị trường việc làm nhờ khả năng tạo ra ứng dụng cho nhiều nền tảng từ một codebase duy nhất. Điều này giúp các công ty tiết kiệm tài nguyên và tăng tốc độ đưa sản phẩm ra thị trường, làm cho các Flutter Developer trở thành ứng viên hấp dẫn trong mắt nhà tuyển dụng.

Trong bài viết đầu tiên của Series này, mình đã giới thiệu cho các bạn về Flutter cơ bản, những đặc trưng thế mạnh của Framework này so với các đối thủ khác hiện nay. Trong các bài viết tiếp theo mình sẽ đi sâu hơn vào cách tiếp cận và học để trở thành 1 lập trình viên Flutter. Cảm ơn sự theo dõi của các bạn.

Có thể bạn muốn xem thêm:

Việt Trần

Xem thêm việc làm IT tại TopDev!