Flutter小部件渲染设计名称?

时间:2019-01-14 21:44:08

标签: flutter

我很高兴学习Flutter。数据更改时,将重新构建整个小部件树。然后Flutter将新树与旧树进行比较,并根据需要更新UI。 这种一般的编程风格叫什么?

这让我想起了几年前我看到的有关Haskel和纯函数式编程的一些知识。无需修改现有数据库,而是创建一个全新的数据库,让持久层确定如何有效地存储它。

这与MVC完全不同,在MVC中,程序员负责了解UI的哪些部分需要更新。使用MVC,有必要知道如何首先构建UI以及如何更新UI。看起来,使用Flutter,我们只需要知道第一部分,即构建UI。

1 个答案:

答案 0 :(得分:1)

此功能是多种范例的结合,尤其是声明性,还包括反应性功能性编程。


说明性编程意味着您无需担心事情会如何变化。相反,您只是描述了给定数据的外观。然后,框架找出要更改的内容。这几乎就是您在问题中描述的范式。

功能性编程是指您提供给小部件构造函数的输入与小部件的build方法的“输出”之间的确定性关系。这几乎描述了与声明式编程相同的内容,但着重于输入和输出之间的关系,而不是一般的样式。 StatelessWidget非常适合此范例。

反应性编程是指对窗口小部件的构造函数进行更改的模式,这些模式会逐渐变为较低级别的窗口小部件,并且事件会重新生成。它更多地关注嵌套小部件之间的交互方式。

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

  

Flutter是一个多范例编程环境。 Flutter使用了过去几十年开发的许多编程技术。我们相信我们每个人都认为该技术的优势使其特别适用。没有特别的顺序:

     

声明式编程

     

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

     

反应式编程

     

有时将小部件和元素树描述为反应性的,因为小部件的构造方法中对小部件构造函数提供的新输入会立即传播为对低级小部件的更改,而在低级小部件中进行的更改(例如,对用户输入的响应)通过事件处理程序传播回树。取决于小部件的需求,功能响应式和命令式响应式的方面都存在于框架中。具有构建方法的小部件是功能性反应性小部件(例如,Material Divider类),该构建方法仅由描述小部件如何对其配置变化做出反应的表达式组成。其构建方法在多个语句中构造子级列表的小部件是命令式反应性小部件(例如,Chip类),这些小部件描述了小部件如何对其配置的更改做出反应。

     

功能编程

     

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