3 回答
TA贡献1942条经验 获得超3个赞
永远不要在类上使用函数来制作可重用的widget-tree。始终将它们提取到StatelessWidget中。
使用函数而不是使用类之间存在巨大差异,即:框架不知道函数,但可以看到类。
考虑以下“窗口小部件”功能:
Widget functionWidget({ Widget child}) {
return Container(child: child);
}
用这种方式:
functionWidget(
child: functionWidget(),
);
它相当于类:
class ClassWidget extends StatelessWidget {
final Widget child;
const ClassWidget({Key key, this.child}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
child: child,
);
}
}
这样使用:
new ClassWidget(
child: new ClassWidget(),
);
在纸上,两者似乎做的完全一样:创建2 Container,一个嵌套在另一个中。但是实际情况略有不同。
对于函数,生成的窗口小部件树如下所示:
Container
Container
在使用类时,小部件树为:
ClassWidget
Container
ClassWidget
Container
这非常重要,因为它从根本上改变了更新小部件时框架的行为。以下是精选的差异列表:
类:
允许性能优化(const构造函数,operator ==覆盖,更精细的重建)
有热装
集成到小部件检查器(debugFillProperties)
可以定义键
可以使用上下文API
确保所有小部件都以相同的方式使用(始终是构造函数)
确保在两个不同的布局之间进行切换可以正确处理资源(功能可以重用某些先前的状态)
功能:
更少的代码(甚至在那里,我都制作了代码生成器以使类与函数一样小:functional_widget)
?
结论应该已经很清楚了:
不要使用函数创建小部件。
- 3 回答
- 0 关注
- 489 浏览
添加回答
举报