【发布时间】:2021-05-10 06:18:12
【问题描述】:
我不确定是否缓存小部件实例并在 build() 方法中重用它会产生重大影响。
假设我们有两个小部件类:
class ParentWidget extends StatelessWidget {
ParentWidget({Key key})
: super(key: key);
@override
Widget build(BuildContext context) {
return Container( // or some other widgets that define the ui
child: ChildWidget(/*...*/),
);
}
}
class ChildWidget extends StatelessWidget {
ChildWidget({Key key}) : super(key: key); // no constant
@override
Widget build(BuildContext context) {
/*
* returns some Widget
*/
}
}
据我了解,每次 Flutter 在ParentWidget 上调用build() 时,都会创建一个新的ChildWidget 并将其附加到元素树中的同一个元素上。除非const ChildWidget 可用(例如ChildWidget 有一个 const 构造函数)。
但是,我们可以像这样缓存孩子:
class ParentWidget extends StatelessWidget {
final Widget child;
ParentWidget({Key key})
: child = ChildWidget(/*...*/),
super(key: key);
@override
Widget build(BuildContext context) {
return Container(
// or some other widgets that define the ui
child: child, // <-- use child instead of ChildWidget()
);
}
}
据我了解,将使用相同的小部件,并且不必通过颤振来修改元素树。但我不确定在哪些情况下重要。
缓存小部件和创建具有相同配置的新小部件之间是否存在显着差异? 如果是这样,是否有关于何时缓存小部件而不是重建它们的规则?
【问题讨论】:
标签: flutter dart flutter-layout