为什么你应该用 Flutter|Devlog · 13
POV:你今天是一个想要开发 native app 的 dev,网页就先不论,你会使用什么框架?你面临的热门选择如下:
原生开发
对用户的体验肯定是最佳,但是时间成本太高,就算你的 desktop 平台全用一个框架的代码,Android 和 iOS 还要写两份。加在一起就是三份代码,试问哪个 indie dev 受的了这样的。除非你的应用场景是 platform specific 的,像是 iOS 的短信过滤等应用场景,不然没有那个人想要干这种事情吧。
Capacitor / H5
抽象中的抽象,不如用浏览器 App,虽然有部份原生的功能如推送通知等。但是对其他比较复杂的系统功能支持困难,并且性能烂的一批。作为一个有着性能焦虑的你肯定不会认为这种东西好吧。
Tauri / Electron
应评论要求,锐评一下。
Electron 很垃圾,超级浪费内存。而且只有 Desktop,不过也算可以考虑的蛮成熟的技术。
那么 Tauri 是比 Electron 好一点,但是 WebView 限制,macOS 没有 120fps。而且移动端支持有,但是依托,而且和 Capacitor 体验差不多(用户体验,开发体验糟糕多了)
所以只适合做 Desktop App
MAUI / C# 家族
XAML 依托,没有深入体验,总之微软的东西都是依托。Issue 不管,还一堆基础性问题,MSFT 自己都不用自己写的框架,却在哪里用 RN。
说它依托都在侮辱答辩。
KMP
Kotlin Multi-Platform 是 JB 做的新玩意,非常不成熟。
如果你会写 Jetpack Compose 可以尝试一下,但是你要忍受什么东西都要自己做,ecosystem 基本上没有的困境。并且准备好踩一堆奇奇怪怪的坑。
React Native
要聊到 Flutter 的最大对手了,React Native。蜥蜴人公司做的框架,但是蜥蜴人自家的应用现在都不用 RN 了。
RN + Expo 体验可以,但是不 + Expo 就是依托。如果你用 React 很习惯,并且只有移动端开发需求,而且有一个良好的设计系统,你可以考虑考虑。
为什么这么说呢?这就要说到 RN 的缺点了。
不要妄想用 React Web 的组件库,因为 RN 用不了 CSS,要用 RN 特制的 StyleSheet
不要妄想用原生 UI (Material on Android, Cupertino on iOS)因为 RN 用的底层是老资历组件库,iOS 上用的是 UIKit,unstyled 的丑的要死。(Expo UI 现在可以做到,但是你又变成 Android / iOS 要写两套代码了)
RN 组件库生态不太好,当然还是有的,但是相比 Flutter 不太好。
RN 的历史底蕴太厚,如果你不用 Expo 版本的直接去用原生 RN 的组件基本上都是 8-9 yr ago updated 的库,基本上都是坏的。
RN 的桌面端支持几乎没有,Web 上因为不用 StyleSheet 用其的兼容层 CSS,效果不好,并且 Responsive 比 Flutter 还难做。
为什么我这么清楚?因为这上面说的我全都体验过,不止 RN,上面列出的所有框架我都体验过,也都写过一个 Solian 的 port;接下来,让我们掌声有请 Flutter。
Flutter
个人体验下来,flutter 最出色的几点莫过于。
- 良好的 DX;Dart 没什么门槛,上手容易。
- 高质量的预制组件,material design 不错看,而且 cupertino 打磨的也不错(虽然现在 Liquid Ass 时代可能落伍了)
- 但是不要以为 Flutter 只有 Material Design,你可以很轻松的造出自己的组件;社区也有 Fluent UI 和其他设计系统的实现。
- 高质量的 ecosystem,基本上你能想到的绝大部分问题都有对应库,并且其中绝大部分都有 active maintenance
- 统一的 UI 和开发体验,不管在哪个平台,Web、iOS/Android 还是桌面端,你都可以看到完全一样的 UI 和用户体验。
- 部份组件有自适应模式,如 material design 的 Buttons 在桌面端上的 Padding 会自动减少一点,不过你可以 override 这些设置。
- 比 RN 和绝大部份框架好的性能。
- 做动画非常方便。
- 小羊在用,你可以问他问题,但是他有时候会骂你如果你问的问题太傻逼了的话。
但是你可能也要接受一点 flutter 的缺点:
- 一些官方库有一些活的很久的 issue 没有处理
- 比如 go_router nest 中有重复出现的页面整个页面会黑掉,SN 目前也受这个问题困扰,不过有别的路由可以使用就是。
- 没有官方的 codepush
- 有个 shorebird,但是付费的方案,不过证明了 flutter 可以做到,只是没人做,做出来的人在忙着赚钱。
- 工作岗位不多
Conclusion
综上所述,如果你计划做一个多端应用场景,并且处于一个小团队或者个人开发。Flutter 是你的不二选择。
如果你只想专注移动端开发,并且有 React 基础,也可以考虑考虑 RN。
其他的,用了几乎就是浪费生命。
当然,网页开发又是另一个世界了,但是 JS 的框架虽然多,体验上也不会有很大落差,就不在这里讨论了。
当然,Flutter 用的好与不好也是会很大程度影响开发体验的,不过这段就且听下回分解。