繁体   English   中英

Flutter 小部件渲染设计名称?

[英]Flutter widget rendering design name?

我很享受学习 Flutter 的过程。 当数据发生变化时,会重建整个小部件树。 然后 Flutter 将新树与旧树进行比较,并根据需要更新 UI。 这种通用的编程风格叫什么?

这让我想起了几年前我看到的一些关于 Haskel 和纯函数式编程的事情。 与其修改现有的数据库,不如创建一个全新的数据库,让持久层弄清楚如何有效地存储它。

这与 MVC 完全不同,MVC 程序员负责知道 UI 的哪些部分需要更新。 对于 MVC,有必要知道如何首先构建 UI 并知道如何更新它。 使用 Flutter,我们似乎只需要了解第一部分,即构建 UI。

此功能是多种范式的混合,尤其是声明式编程,但也包括响应式函数式编程。


声明式编程意味着您无需担心事情会如何变化。 相反,您只需根据一些数据描述它们的外观。 然后,框架确定要更改的内容。 这几乎就是您在问题中描述的范式。

函数式编程是指您提供给小部件构造函数的输入与小部件build方法的“输出”之间的确定性关系。 这与声明式编程几乎相同,但侧重于输入和输出之间的关系,而不是一般的风格。 StatelessWidget非常适合这种范式。

响应式编程是指对小部件构造函数的更改向下波及到较低级别的小部件和事件冒泡的模式。 它更多地关注嵌套小部件如何相互交互。

这是Flutter FAQ的摘录。 在网站上,他们还描述了 Flutter 使用的其他几种范式。

Flutter 是一个多范式的编程环境。 Flutter 中使用了过去几十年开发的许多编程技术。 我们在我们相信技术的优势使其特别适合的地方使用每一种。 没有特定的顺序:

声明式编程

小部件的构建方法通常是具有多层嵌套构造函数的单个表达式,使用 Dart 的严格声明性子集编写。 这样的嵌套表达式可以机械地转换为任何合适的表达标记语言或从任何适当的表达标记语言转换而来。 例如,UserAccountsDrawerHeader 小部件有一个很长的构建方法(20 多行),由单个嵌套表达式组成。 这也可以与命令式风格相结合,以构建在纯声明式方法中更难描述的 UI。

反应式编程

小部件和元素树有时被描述为反应性的,因为小部件构造函数中提供的新输入通过小部件的构建方法立即传播为对较低级别小部件的更改,以及在较低小部件中所做的更改(例如,响应用户输入)通过事件处理程序传播回树。 根据小部件的需要,框架中存在功能性反应和命令性反应的方面。 具有构建方法的小部件仅由描述小部件如何对其配置中的更改做出反应的表达式组成,是功能性反应小部件(例如,Material Divider 类)。 其构建方法在多个语句上构建子项列表的小部件,描述小部件如何对其配置中的变化做出反应,是命令式反应小部件(例如,Chip 类)。

函数式编程

整个应用程序只能使用 StatelessWidgets 构建,这些函数本质上是描述参数如何映射到其他函数的函数,在计算布局或绘制图形的基元中达到最低点。 (此类应用程序不容易拥有状态,因此通常是非交互式的。)例如,图标小部件本质上是一个将其参数(颜色、图标、大小)映射到布局基元的函数。 此外,大量使用不可变数据结构,包括整个 Widget 类层次结构以及众多支持类,例如 Rect 和 TextStyle。 在较小的范围内,Dart 的 Iterable API 大量使用函数样式(map、reduce、where 等),经常用于处理框架中的值列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM