- vừa được xem lúc

Bloc, Provider, GetX. Đâu là thư viện quản lí state Flutter tốt nhất?

0 0 9

Người đăng: Tuyển Thủ Lon Nước Ngọt

Theo Viblo Asia

Mở đầu

Khi nói đến quản lý state trong Flutter, có một số lựa chọn phổ biến như Bloc, Provider, GetX, và các thư viện khác. Mỗi thư viện đều có những ưu và nhược điểm riêng. Vậy đâu mới là sự lựa chọn tối ưu cho dự án? Dưới đây là một phân tích về các thư viện này. Mọi người có đóng góp gì hãy để lại bình luận bên dưới nha.

Phân tích các thư viện

  1. Bloc (Business Logic Component):

    • Bloc là một mô hình kiến trúc được thiết kế để phân tách logic nghiệp vụ khỏi giao diện người dùng.
    • Nó sử dụng các Streams và Sinks để truyền dữ liệu giữa các thành phần khác nhau.
    • Bloc thường được sử dụng cùng với các thư viện hỗ trợ như RxDart hoặc flutter_bloc.
    • Ưu điểm: Mô hình rõ ràng, dễ kiểm thử, dễ mở rộng, và tách biệt logic nghiệp vụ khỏi giao diện người dùng.
    • Nhược điểm: Cấu trúc phức tạp hơn, và có thể gây ra lãng phí bộ nhớ nếu không quản lý đúng cách, sẽ khó học cho người mới bắt đầu hay dùng cho các dự án nhỏ.
  2. Provider:

    • Provider là một thư viện quản lý state đơn giản và nhỏ gọn.
    • Nó sử dụng mô hình InheritedWidget để truyền data xuống cây widget.
    • Provider cung cấp các lớp như ChangeNotifierProvider, StreamProvider, và FutureProvider để quản lý các loại state khác nhau.
    • Ưu điểm: Dễ học, dễ sử dụng, và đơn giản hóa việc quản lý state.
    • Nhược điểm: Có thể gây ra vấn đề hiệu suất nếu sử dụng quá nhiều provider, và không có cấu trúc rõ ràng cho logic nghiệp vụ.
  3. GetX:

    • GetX là một thư viện quản lý state, định tuyến, và thực hiện các tác vụ khác trong Flutter.
    • Nó cung cấp các tính năng như quản lý dependencies, quản lý state, định tuyến, và quản lý thủ tục.
    • GetX sử dụng reactive programming để quản lý state và cung cấp các lớp như GetBuilder, Obx, và GetX để xây dựng giao diện người dùng.
    • Ưu điểm: Tích hợp nhiều tính năng, cú pháp ngắn gọn, và dễ học.
    • Nhược điểm: Có thể gây ra vấn đề hiệu suất nếu sử dụng quá nhiều GetBuilder hoặc Obx, và thiếu tính linh hoạt trong một số trường hợp.

Sau khi đánh giá các ưu và nhược điểm của các thư viện, mình thấy không có một lựa chọn tuyệt đối tốt nhất cho mọi trường hợp. Sự lựa chọn phụ thuộc vào yêu cầu của dự án, quy mô của ứng dụng, và kinh nghiệm của nhóm phát triển.

  • Nếu bạn đang làm một dự án nhỏ hoặc vừa, Provider có thể là lựa chọn tốt nhất vì nó đơn giản và dễ sử dụng. Tuy nhiên, khi dự án lớn lên, việc sử dụng quá nhiều Provider có thể gây ra vấn đề hiệu suất và khó quản lý.

  • Bloc là một lựa chọn tuyệt vời cho các ứng dụng lớn và phức tạp, nơi bạn cần tách biệt logic nghiệp vụ khỏi giao diện người dùng. Mục đích việc tách code business logic ra khỏi UI thay vì code gộp chung cả logic và UI vô cùng 1 file, để sau này tài liệu mới có yêu cầu sửa code business logic hay sửa UI sẽ dễ dàng sửa hơn. Chính vì tách biệt logic và UI nên BLoc rất được tin dùng cho các dự án lớn, cần maintain, có tính scale tốt,... BLoc khá giống mô hình MVVM. Bloc có cấu trúc phức tạp, vì vậy nó có thể không quá phù hợp với các dự án nhỏ hoặc các nhóm phát triển mới bắt đầu với Flutter.

  • GetX là một lựa chọn tuyệt vời nếu bạn đang tìm kiếm một thư viện đa năng, cung cấp nhiều tính năng khác nhau như quản lý state, định tuyến, và quản lý dependencies. Tuy nhiên, GetX có thể gây ra vấn đề hiệu suất nếu sử dụng quá nhiều GetBuilder hoặc Obx, và thiếu tính linh hoạt trong một số trường hợp. GetX hay được khuyên dùng cho các dự án nhỏ và cho người mới bắt đầu tiếp cận với quản lí state trong Flutter.

Kết

Không có một lựa chọn tốt nhất cho mọi trường hợp. Bạn nên cân nhắc yêu cầu của dự án, quy mô của ứng dụng, và kinh nghiệm của nhóm phát triển để lựa chọn thư viện quản lý state phù hợp nhất. Ngoài ra, bạn cũng có thể kết hợp các thư viện khác nhau trong cùng một dự án để tận dụng những ưu điểm của chúng.

Tham khảo thêm các document của 3 thư viện trên tại:

Bloc: https://bloclibrary.dev/

Provider: https://pub.dev/packages/provider

GetX: https://pub.dev/packages/get

Bình luận

Bài viết tương tự

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 1: Làm quen cô nàng Flutter

Lời mở đầu. Gần đây, Flutter nổi lên và được Google PR như một xu thế của lập trình di động vậy.

0 0 281

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 3: Lột trần cô nàng Flutter, BuildContext là gì?

Lời mở đầu. Màn làm quen cô nàng FLutter ở Phần 1 đã gieo rắc vào đầu chúng ta quá nhiều điều bí ẩn về nàng Flutter.

0 0 207

- vừa được xem lúc

Flutter Animation: Creating medium’s clap animation in flutte Part II

Trong phần 1 mình đã giới thiệu với các bạn cơ bản về Animation trong Flutter. Score Widget Size Animation.

0 0 64

- vừa được xem lúc

Flutter - GetX - Using GetConnect to handle API request (Part 4)

Giới thiệu. Xin chào các bạn, lại là mình với series về GetX và Flutter.

0 0 356

- vừa được xem lúc

StatefulWidget và StatelessWidget trong Flutter

I. Mở đầu. Khi các bạn build một ứng dụng với Flutter thì Widgets là thứ không thể thiếu đúng không ạ. Và 2 loại Widget không thể thiếu đó là StatefullWidget và StatelessWidget.

0 0 145

- vừa được xem lúc

Tìm hiểu về Riverpod - Provider nhưng không hắn :v

Trong Flutter có rất nhiều các quản lý state: Provider, Bloc, GetX, Redux,... khó mà nói cái nào tốt hơn cái nào. Tuy nhiên nếu bạn đã làm quen với Provider thì không ngại để tìm hiểu thêm về Riverpod. Một bản nâng cấp của Provider. Nếu bạn để ý thì cái tên "Riverpod" là các chữ cái của "Provider" đ

0 0 67