我不确定缓存小部件实例并在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
*/
}
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,每次 Flutter 调用build()时ParentWidget,都会创建一个新元素ChildWidget并将其附加到元素树中的同一元素。除非 ifconst ChildWidget可用(例如ChildWidget有一个 const 构造函数)。
但是,我们可以像这样缓存孩子:
class …Run Code Online (Sandbox Code Playgroud)