【发布时间】:2020-03-05 13:02:23
【问题描述】:
我仍在纠结于状态管理技术,对于何时以及为什么使用 Provider.of<X> 与 Consumer<X> 有点困惑。我从documentation 了解到(我认为),在这两者之间进行选择时,当我们想要访问数据时,您将使用 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会怎样? - 我们有
Consumer,为什么Provider.of可以选择重建用户界面?
【问题讨论】:
标签: flutter dart flutter-provider