我在Android开发方面拥有深厚的背景,现在我正尝试使用Flutter开发我的第一个应用程序。
在Android社区中,众所周知,嵌套视图太多是很糟糕的。这对性能不利。 (这就是ConstraintLayout存在的原因之一)
但是,在许多Flutter教程中,我看到人们嵌套了许多小部件。
有人可以确认使用Flutter嵌套窗口小部件不是问题吗?如果这样做,我的应用程序会不会表现不好?
预先感谢
答案 0 :(得分:6)
TL; DR:建议在Flutter中深度嵌套单一用途的小部件。
Android和Flutter呈现视图元素(即小部件或视图)的方式存在根本差异。
在Android中,相互继承的复杂视图相对较少。 每个视图都提供了一个巨大的API表面,包括填充,边距,颜色等。
另一方面,Flutter倾向于组成优于继承。 大多数小部件仅用于单一目的,并且非常轻巧。 这意味着您需要更深入地嵌套窗口小部件以实现相同的效果,但是由于它们的布局和渲染逻辑更容易,因此渲染通常会更快。
例如,有一个Padding
小部件在其子级周围留有空间。
Padding
小部件的规则非常简单,因此渲染速度非常快。
此外,其他所有小部件的规则也变得更加简单,因为它们不再需要担心填充问题。
基本上,在Flutter中建议深度嵌套小部件。 与Android模型完全相反: 如果没有太多嵌套,则您可能做错了,因为您有一个庞大的小部件,通常可以将其拆分为更简单,更快,更小的小部件。
这里是interesting Google Tech Talk about Flutter's rendering pipeline,我推荐给对此主题感兴趣的人。
答案 1 :(得分:5)
嵌套小部件不是问题,实际上是建议这样做。 实际上,默认的计数器应用程序包含不少于150个小部件。
窗口小部件是轻量级的对象,经过专门优化以在每帧中创建和销毁大量对象。 Flutter FAQ进一步证明了这一点:
Flutter拥有组成功能,而不是让每个小部件提供大量参数。窗口小部件由较小的窗口小部件构建而成,您可以重用这些小窗口小部件,并以新颖的方式组合以创建自定义窗口小部件。例如,RaisedButton不会将通用按钮小部件归类,而是将Material小部件与GestureDetector小部件组合在一起。 “材质”小部件提供视觉设计,而“手势手势”部件提供交互设计。
这句话说,您应该有目的地嵌套小部件。