最佳答案
我仍然对状态管理技术感到困惑,对于什么时候使用 Provider.of<X>
和为什么使用 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,后者更新 UI?listen
没有设置为 false
,那么小部件是默认重新构建还是不重新构建?如果 listen
设置为 true
怎么办?Consumer
的时候,为什么还要选择 Provider.of
来重建 UI 呢?