为何有人会喜欢Flutter?

223 阅读7分钟

作者:栈庐 链接:www.zhihu.com/question/42…

在海外早就有人在争论Flutter是否会取代RN,或者他们两个谁更好~

尽管身边也有人吐槽flutter的一些问题,譬如:

1.随机崩溃:一些团队遇到了与代码错误无关的crash。

2.巨大的文件量:为了使代码量尽量少,开发者通常避免动画、压缩图像并减少包和库的数量,但flutter使用起来仍会有些事与愿违。

3. 没有第三方库:对于开发人员而言,第三方包和库在自动化开发中起着至关重要的作用,flutter还是比较新,目前三方库比较少。

但是瑕不掩瑜,目前国内有不少团队在利用flutter开发自己的应用,譬如阿里的飞猪、贝壳网,

为什么有会有人喜欢flutter,我们先数出9个原因。


  1. 用户界面和逻辑不会因平台而异
  2. 更快的开发速度
  3. 快速上线
  4. 近乎原生的应用性能
  5. UI定制潜力巨大
  6. 独立的渲染引擎
  7. 不依赖于平台特定的UI组件
  8. 适用于任何目标平台

Flutter是个交付性能良好的跨平台应用开发解决方案,加之谷歌在身后做强力支持,可以预见到,Flutter正式成为终极的跨平台UI框架也许只是个时间问题。

简单总结如上,

关于这些优势的解析阐述如下:


  1. UI和业务逻辑适用于不同平台

基本上所有跨平台框架都提供了一种在目标平台之间共享代码库的方式,但是,Flutter是个例外,它允许共享UI代码和UI本身。

为了展示这一点,找了两个示例,第一个示例显示了大多数跨平台框架中的UI呈现方式:

(大多数跨平台框架)上图这样的渲染过程,

貌似让接近原生般的跨平台应用构建变得简单,不过细节决定成败,由于依赖目标平台的组件进行渲染,这样就需要通过目标平台widget和框架widget数据同步的属性映射层,导致将每个动画映射到特定于平台的widget调用。

相比之下,Flutter不需要任何针对平台的UI组件去渲染其UI,它为了渲染应用用户界面的唯一前提就是canvas,类下图:

Flutter的渲染方式使其鹤立鸡群,消除了开发者对不同平台上UI一致性的任何担忧。

2.减少开发时间 这里有一个iOS交流圈:891/ 488 /181 可以来了解 根据我们的经验,构建一个普通的中型代码量Android应用也至少需要40秒才能交付到测试设备上;有时,调整布局中的较小外观可能需要花费很多时间。

有人可能会说:Android Studio为此提供了布局预览。但是,有一个缺点:该功能是有限的,并非总是能按预期运行,尤其是在使用自定义视图时。

Flutter的“热加载”功能又使你几乎可以立即看到已应用的更改,甚至不会丢失当前的应用状态。这正是利用flutter开发应用能够大大提速的原因。

Flutter团队投入大量精力为开发者提供各种现成的widget,很多widget甚至是可自定义的,这点与以往其他框架一样,又节省了你的时间;除了众多的核心布局widget之外,Flutter还提供了大量的Material和Cupertino小部件,可以完美的模仿每种设计语言的行为,大概工作原理如下:

归纳起来,使用Flutter,你会跳过应用开发中的几个超耗时的步骤。

3. 加快产品上线速度

在大多数情况下,与单独为Android和iOS开发的同一个应用相比较,Flutter应用所需的开发工时至少要少两倍。

原因简单:你不必单独为特定的平台去编写代码,就可以获得所需的视觉效果;任何基于2D的UI都可以在Flutter中实现,同时无需与本机应用扯上关系。

除此之外,Flutter还提供了用于构建UI的声明式API,可以显著提高性能,特别是涉及视觉调整相关的工作时,这个优势尤其突出。

4. 媲美原生

Flutter直接对接到了底层的绘制引擎,而不像RN得需要先转化成原生系统提供的UI组件,所以理论上来说Flutter在性能方面应该是等同于原生的,但是由于系统通常会对原生应用有着诸多的优化,所以也只能含蓄的用“媲美”一词。那么Flutter这样的设计也使得Flutter在多端一致性方面碾压其它跨平台方案。

5. 实现任何复杂、自定义动画UI

Flutter的最大优点之一是可以自定义屏幕上显示的任何内容,而不论它多么复杂。

尽管原生也可以实现自定义的UI,但对比起来所需的工作量投入是不同的。

下面是一个简单但自定义的UI的示例:

可以说,Flutter使该过程更加灵活和通用,也不会增加工作量。共享元素过渡,形状/颜色/阴影、剪切、过度, 这些都可以轻松实现。

6.独立渲染引擎

前面所说的,如果没有高性能的跨平台渲染引擎,上述功能大部分将无法实现。

Flutter使用Skia来渲染到平台提供的canvas上,由于有了高性能引擎,Flutter内置的UI几乎可以在任何平台上启动。换句话说,不再需要调整UI即可将其迁移到目标平台上,极大地简化了开发过程。

7. 针对平台的简单逻辑实现

除了UI外,许多当下移动应用非常依赖高级OS级别的功能,例如:获取GPS坐标、蓝牙通信、收集传感器数据、权限处理等,而其中许多功能在开发Flutter应用时是可以通过Google提供的即用型插件去打通的。

当然,在某些情况下总会有无法提供的插件,Flutter也考虑到了,它的解决方案是,通过平台渠道在平台本机代码和Dart之间建立通信,这样的话,仅在原生方面付出一点额外的努力,你就可以在Flutter应用上实现原生应用可以执行的任何操作。

示例如下:

8. 已不仅仅是移动端

最后,你不仅可以在移动设备上进行Flutter应用开发,而且也有Flutter for Web和Flutter Desktop Embeddings。例如,在2020年的I/O会议上,Google展示了Flutter Web的技术前瞻,这使在浏览器中运行纯Flutter应用变成了可能,注意,这是无需修改源码的。


总结,Flutter和Dart语言的合璧,加之谷歌正在精心打造的Fuchsia操作系统,或许谷歌的野心是有一天让通过Flutter框架开发的应用运行在不同的智能设备上。

那么,恐怕不仅仅是“有人喜欢Flutter”,而是会有更多开发者加入利用这套框架进行应用开发的行列中。

文章到这里就结束了,如果你对flutter问题很有兴趣,也欢迎大家iOS技术交流群进行交流讨论。你也可以私信我及时获取最新资料以及面试相关资料。如果你有什么意见和建议欢迎给我留言。