我仍然在关注 flutter 中的状态管理技术,并且对何时以及为什么使用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}');
},
),
),
);
Run Code Online (Sandbox Code Playgroud)
然而,在这里我们只需要在数据上不希望与UI重建,我们会使用Provider.of<X>与listen参数集false,如下图所示:
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
Run Code Online (Sandbox Code Playgroud)
但是,listen不是必需的,因此以下内容也将运行:
Provider.of<CartModel>(context).add(item); \\listener optional
Run Code Online (Sandbox Code Playgroud)
所以这给我带来了几个问题:
Provider.of<X>和的正确方法吗Consumer<X>?前者不更新用户界面,后者呢?listen未设置为false默认情况下会重建小部件还是不重建?如果listen设置为true呢?