Tob*_*aun 7 dart flutter flutter-layout
我不确定缓存小部件实例并在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 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()
);
}
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,将使用相同的小部件,并且颤动不需要对元素树进行任何修改。但我不确定在哪些情况下这很重要。
缓存小部件和创建具有相同配置的新小部件之间有显着差异吗?如果是这样,是否有关于何时缓存小部件而不是重建它们的规则?
| 归档时间: |
|
| 查看次数: |
1678 次 |
| 最近记录: |