【发布时间】:2020-02-18 20:01:17
【问题描述】:
我有一个关于 Flutter 中 Provider 包的 Consumer 的问题。 我不明白 Consumer 构建器中参数“child”的目的
Consumer<MyModel>(builder: (context, myModel, child) {
// doing stuff using myModel variable
});
我找不到任何关于它的文档。
【问题讨论】:
我有一个关于 Flutter 中 Provider 包的 Consumer 的问题。 我不明白 Consumer 构建器中参数“child”的目的
Consumer<MyModel>(builder: (context, myModel, child) {
// doing stuff using myModel variable
});
我找不到任何关于它的文档。
【问题讨论】:
子是任何不需要提供程序内部数据的小部件,因此当数据更新时,它们不会重新创建,因为它们不需要数据,而是作为参考建造者。
Consumer(
builder: (context, myModel, child) {
// child will refer to the MaterialButton provided as the child argument in the
// Consumer named parameter,
// doing stuff using myModel variable
}
child: MaterialButton(
child: Text("Do some action"),
onPressed: () {
// do some actions
},),);
由于 MaterialButton 不需要提供程序的状态,但它在后代树中,因此无需重新渲染它,因此将其传递回构建器,以节省内存并提高性能
【讨论】:
Consumer 是ChangeNotifierProvider 类型,并且在调用notifyListener() 时我们没有要重建的特定小部件,那么我们可以使用child 属性。
您可以在消费者中传递子小部件。当数据更改时,您作为孩子传递的任何小部件都不会重建。
您可以避免使用子组件进行不必要的小部件重建。
【讨论】:
Scaffold、AppBar 和Column 组成的小部件树。 Column 包含三个小部件:Text、Future Builder、Flat Button。我想在提供者的状态发生变化时重建所有东西(AppBar, Column ..),Future Builder 除外(否则它将执行不必要的读取)。