NGHỆ THUẬT FLUTTER : CÁC CÁCH QUẢN LÝ STATE TRONG FLUTTER – Provider Basic

Provider trong Flutter là một trong những kiến thức cơ bản mà bất cứ lập trình viên Flutter nào cần phải được nắm vững.

Provider trong lập trình Flutter được coi như là một bản nâng cấp so với cách quản lý trạng thái : InheritedWidget mà tôi đã có bài viết trong chuyên đề nghệ thuật Flutter.

Provider được xây dựng cũng theo tư tưởng như InheritedWidget nhưng dễ sử dụng và rất nhiều tính năng ưu viêt như:
+ Phân bổ và xử lý tài nguyên đơn giản
+ lazy loading
+ Dễ dùng và thân thiện trong những project lớn và phức tạp

Ngoài ra, provider còn được tích hợp vào trong các cách quản lý trạng thái (State Management) khác như : flutter_bloc, Mobx

Nguyên lý
Provider được tạo ra dựa trên InheritedWidget, vì vậy nguyên lý của nó cũng tương tự,

Khi khai báo provider trên một Widget tổ tiên( cha, ông.. )-ancestor widget thì các Widget con cháu có thể sử dụng và cập nhật giá trị. Khi giá trị của model đăng kí provider thay đổi thì tất cả các Widget con cháu nào mà liên quan đến các thuộc tính của phần tử này sẽ được cập nhật lại.

Dưới đây tôi sẽ đưa ra một ví dụ: Tạo ra các widgets là các box và đặt đăng kí provider ở trước Widget cha. Các Widget con, có box sử dụng thuộc tính provider, có box thì không. Khi thay đổi giá trị các thuộc tính thì tất cả các Widget liên quan sẽ thay đổi.

Bắt đầu nào !

Tạo một Flutter project mới:

Cài đặt thư viện

Khai báo thư viện trên pubspec.yaml : provider
Ví dụ :

Nhấn Pub get hoặc run trên Terminal : flutter packages get

Tạo một lớp Feature
Lớp này chứa các thuộc tính như : count, sử dụng ChangeNotifier để lắng nghe những sự thay đổi.

Class này chứa các phương thức và thuộc tính, đặt lắng nghe khi có sự thay đổi bằng việc sử dụng ChangeNotifier

2. Tạo các Widgets, khai báo provider và sử dụng các thuộc tính, phương thức của model trên.

* Khai báo Provider

Khai báo provider được thực hiện trước các Widget là Widget tổ tiên của các Widget con mà sử dụng các thuộc tính, phương thức của model mà đăng kí provider.
Thông thường đăng kí provider ở hàm main hay trong class đầu tiên của ứng dụng. Ví dụ :

Từ đoạn code trên chúng ta biết được cách đăng kí Provider :

* Tiếp theo là tạo các widget Box1, và Box21, Box22, Box23 là các Widget con của Box1 , các Widget : Box21, Box23 sẽ sử dụng thuộc tính của model : Feature thông qua provider còn Box22 thì không.

Do vậy khi thay đổi giá trị count ở Box1 thì Widget Box21, Box23 sẽ thay đổi

Các sử dụng thuộc tính:
* Dùng Watch khi lắng nghe để hiển thị

* Dùng read khi muốn dùng để thay đổi

Box1

Box21

Box22

Box23

Kết quả thì như hình bên trên.
Sourcecode của bài viết này trên Github.

Như vậy, các bạn đã biết các sử dụng provider một các cơ bản. Tóm lại bao gồm các bước sau:
+ Khai báo thư viện
+ Tạo model và đặt lắng nghe với ChangeNotifier
+ Khai báo provider ở các Widget cha
+ Sử dụng provider ở các Widget con.

Tiếp tục về Provider, tôi sẽ viết một bài viết nữa về advanced Provider, hi vọng được các bạn đón đọc

Chúc các bạn có được nhiều kiến thức từ blog của tôi !

3 Replies to “NGHỆ THUẬT FLUTTER : CÁC CÁCH QUẢN LÝ STATE TRONG FLUTTER – Provider Basic”

  1. anh cho em hỏi về mấy hàm read(), với watch() , khi nào nên dùng read(), khi nào nên dùng watch() ạ?
    Em có đang tìm hiểu và làm 1 ví dụ đơn giản về sate notifier và provider , em dùng select() để hiển thị state thay đổi của widget còn watch() cho việc update lại state cho widget.
    Như bài viết thì em thấy hàm watch() là dùng để hiển thị state đã thay đổi, còn hàm read() dùng để thay đổi giá trị của state.
    Anh có thể giải thích giúp em một chút được không ạ? em có đọc với doc của provider nhưng vẫn hơi khó hiểu cách dùng của 3 hàm này.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *