flutter - Flutter 有很多嵌套的小部件是不是很糟糕?
问题描述
我在 Android 开发方面有很强的背景,现在我正在尝试使用 Flutter 开发我的第一个应用程序。
Android 社区的一个常识是嵌套视图太多是不好的。这对性能不利。(这也是 ConstraintLayout 存在的原因之一)
然而,在很多 Flutter 教程中,我看到人们嵌套了很多小部件。
有人可以确认用 Flutter 嵌套小部件不是问题吗?如果我这样做,我的应用程序会遭受糟糕的性能吗?
提前致谢
解决方案
TL;DR:建议在 Flutter 中深度嵌套单一用途的小部件。
Android 和 Flutter 渲染视图元素(又名小部件或视图)的方式存在根本差异。
在 Android 中,相互继承的复杂视图相对较少。每个视图都提供了一个巨大的 API 界面,包括填充、边距、颜色等。
另一方面,Flutter 更喜欢组合而不是继承。大多数小部件仅出于单一目的而存在,并且非常轻量级。这意味着您需要更深入地嵌套小部件以实现相同的效果,但由于它们的布局和渲染逻辑更容易,渲染通常更快。
例如,有一个Padding
小部件在其子项周围留出一些空间。小Padding
部件的规则非常简单,渲染速度非常快。此外,每个其他小部件的规则也变得更简单,因为它们不再需要担心填充。
基本上,Flutter 推荐深度嵌套小部件。这与 Android 的模型完全相反: 如果没有太多嵌套,您可能做错了什么,因为您有一个巨大的小部件,通常可以拆分成更简单、更快、更小的小部件。
这是一个关于 Flutter 渲染管道的有趣的 Google 技术讲座,我推荐给任何对此主题感兴趣的人。
推荐阅读
- java - Java如何将文本文件中的内容存储到arraylist
- spring - Spring Boot中双向一对多关系的LazyInitializationException
- python-3.x - 从 2D 列表中选择列具有所需值的所有行
- python - 如何在python中做与两列相关的多个直方图/条形图?
- c++ - 如果以下行不包含决策或分支,则 GDB 无法跨过函数
- php - 使用 PHP 在 Google 应用引擎中进行连接检查
- c# - 如何在 vsix 可扩展性项目中自定义菜单项按钮的位置?
- python - 如何在 django admin 中制作与模型无关的自定义输入文件?
- python - 如何使用 PYTHON 中的 scikit-learn 模块为神经网络编写多输入 - 1 输出?
- html - Jekyll 包含转义结束标签?