我仍然在扑朔迷离地围绕状态管理技术,对何时何地使用Provider.of<X>
vs. 感到困惑Consumer<X>
。我从文档中了解(我认为),当我们要访问数据时在这两者之间进行选择时,可以使用Provider.of,但不需要更改UI。因此,以下内容(来自文档)可以访问数据并在发生新事件时更新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
怎么办? - 为什么要
Provider.of
选择完全重建UI的选项Consumer
呢?