一、2D渲染引擎 Skia
- Flutter不使用WebView,也不使用操作系统的原生控件,而是使用Google自身的2D渲染引擎Skia(目前 Google Chrome浏览器和 Android 均采用 Skia 作为其 2D 绘图引擎。)
二、为什么用Dart
因为JIT 和 AOT
程序主要有两种运行方式:静态编译与动态解释。
AOT :静态编译的程序在执行前程序会被提前编译为机器码(或中间字节码),通常将这种类型称为AOT (Ahead of time)即 “提前编译”。
JIT:解释执行则是在运行时将源码实时翻译为机器码来执行,通常将这种类型称为JIT(Just-in-time)即“即时编译”。
Dart 在 JIT(即时编译)模式下,执行速度与 JavaScript 基本持平Dart 支持 AOT,当以 AOT模式运行时,JavaScript 便远远追不上了。
所以效率高!
三、声明式和命令式
app开发中。
Flutter是声明式编程。 注重结果
传统的安卓开发是命令式编程。 注重过程
比如你想要一杯咖啡。
如果你使用的是命令式编程,你就需要给出每一步的具体指令,就像你自己亲手制作咖啡那样。比如你需要先把咖啡豆研磨成粉,然后用沸水冲泡,接着加糖和牛奶等等。你需要详细描述每一个步骤,只有这样,你才能得到你想要的咖啡。这种方式就像Java开发Android那样,你需要清楚地知道每一步的具体实现,以确保最终的结果符合预期。
而如果你使用的是声明式编程,你就只需要描述你想要什么,而不是怎么做。这就像你在咖啡店点单一样,你只需要告诉店员你想要一杯摩卡咖啡,至于怎么制作,那是店员的事情,你不需要关心。Flutter就是基于这种声明式编程范式的,你只需要告诉系统你想要一个什么样的界面,比如你想要一个按钮,带有特定颜色和文字,至于这个按钮如何绘制到屏幕上,那是系统负责的。
通过比较,我们可以看到声明式编程更加关注结果,而命令式编程则更加关注过程。
开发中,如果是Java,它是一种命令式语言。在使用Java进行安卓开发时,你需要按照一系列步骤和流程编写代码,用以定义用户界面的状态,并且当这个状态发生改变时,你需要手动更新UI。例如,如果你正在开发一个天气应用,你需要创建一个按钮,当用户点击这个按钮时,你需要去网络上抓取天气数据,并在获取数据后更新UI。这一切都需要你明确告诉程序如何操作,如何改变。
再来看Flutter,它的核心理念是声明式UI。这意味着你只需要描述你希望看到的用户界面是什么样子,而不用告诉应用程序如何去实现这个界面。再拿刚才的天气应用为例,使用Flutter时,你会定义一个状态(比如天气数据),当这个状态改变时,Flutter会自动重新构建UI,以反映这个新的状态。你不需要手动更新界面,只需要告诉Flutter你期望的界面状态即可。这就是声明式编程。
四、全世界都是都是widget
widget 在Flutter的世界里可不只是组件。
页面是widget
手势是widget
主题也是widget
噢霍