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