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 用的好与不好也是会很大程度影响开发体验的,不过这段就且听下回分解。
