Tôi vẫn đang xoay quanh các kỹ thuật quản lý nhà nước trong sự rung động và hơi bối rối về việc khi nào và tại sao nên sử dụng Provider.of<X>
so với Consumer<X>
. Tôi hiểu (tôi nghĩ) từ tài liệu rằng khi chọn giữa hai thứ này, bạn sẽ sử dụng Carrier.of khi chúng tôi muốn truy cập vào dữ liệu, nhưng bạn không cần UI thay đổi. Vì vậy, những điều sau đây (được lấy từ các tài liệu) có quyền truy cập vào dữ liệu và cập nhật giao diện người dùng về các sự kiện mới:
return HumongousWidget(
// ...
child: AnotherMonstrousWidget(// <- This widget will rebuild on new data events
// ...
child: Consumer<CartModel>(
builder: (context, cart, child) {
return Text('Total price: ${cart.totalPrice}');
},
),
),
);
Trong khi đó, nơi chúng tôi chỉ cần dữ liệu trên không muốn xây dựng lại với UI, chúng tôi sẽ sử dụng Provider.of<X>
với listen
tham số được đặt thành false
, như sau:
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
Tuy nhiên, listen
không bắt buộc và vì vậy những điều sau đây cũng sẽ chạy:
Provider.of<CartModel>(context).add(item); \\listener optional
Vì vậy, điều này mang lại cho tôi một vài câu hỏi:
- Đây có phải là cách chính xác để phân biệt
Provider.of<X>
vàConsumer<X>
. Cái cũ không cập nhật UI, cái nào sau? - Nếu
listen
không được đặt thànhfalse
, widget sẽ được xây dựng lại theo mặc định hoặc không được xây dựng lại? Điều gì nếulisten
được đặt thànhtrue
? - Tại sao có
Provider.of
tùy chọn để xây dựng lại giao diện người dùng khi chúng ta cóConsumer
?