Provider.of<X>
和Consumer<X>
还有些困惑。根据文档,当我们想要访问数据但不需要更新UI时,应该使用Provider.of。因此,以下代码(摘自文档)可以访问数据并在新事件上更新UI: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}');
},
),
),
);
如果我们只需要数据而不想用UI重建,我们可以使用Provider.of<X>
,并将listen
参数设置为false
,如下所示:
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
然而,
listen
不是必须的,因此以下代码也可以运行:Provider.of<CartModel>(context).add(item); \\listener optional
这让我有几个问题:
- 这是区分
Provider.of<X>
和Consumer<X>
的正确方法吗?前者不会更新UI,而后者会吗? - 如果未将
listen
设置为false
,小部件是否会默认重建或不重建?如果将listen
设置为true
呢? - 既然有了
Consumer
,为什么还要使用具有重建UI选项的Provider.of
?