Flutter 是个知名度很大但实际上并不怎么流行的框架。
我用 LibChecker 检查我手机上的 APP 有很多使用了 Flutter 的 SDK 。但实际上全面使用 Flutter 的只有《哔哩哔哩漫画》,有些 APP 部分页面使用 Flutter:《咸鱼》《飞猪》,更多是使用了 Flutter 的 SDK 但我找不到哪个页面是用 Flutter 写的:《微信》《微博》《豆瓣》《优酷》。
Flutter 视图是完全自绘的,交互体验上和 native 有很多不同,因此可以很容易判断哪个页面是不是用 Flutter 渲染的。比如在 Flutter 页面上双指滚动就能双倍滚动。
Flutter 成也自绘败也自绘。自绘的好处是可以在所有平台上获得一致的视图。坏处则是比不过原生的动画流畅性和交互体验,这方面有太多的 issues 了:动画反馈会延迟 1~3 帧,无法使用 Android 12 的滚动回弹动画,滑动和翻页时有明显的掉帧,严重的着色器编译时卡顿(
https://docs.flutter.dev/perf/shader ) 。
总的来说 Flutter 开发的页面用户体验相比原生是明显倒退的,这可能也是为什么大厂不全面使用 Flutter 的原因。希望 Impeller 引擎完善之后能改进性能问题。
说到 Flutter 就不得不提老对手 React Native 。
RN 这两年在性能上做了诸多努力:0.68 支持 Fabric 渲染器架构,使用 jsi 与原生进程通讯,使得 js 与原生进程的通讯不再成为性能瓶颈; 0.70 使用 Hermes 作为默认 js 引擎,性能提升 51% - 63% (
https://reactnative.dev/blog/2022/07/08/hermes-as-the-default ) 。
另外 React Native 始终使用原生渲染,没有上面说的 Flutter 的一大堆问题。
假如原生的用户体验是 100 分,那么 RN 的上限就是 100 分,Skia 引擎的 Flutter 的上限是 90 分,希望 Impeller 引擎的 Flutter 的上限能达到 95 分以上。
再说 Dart 语言:我觉得本身 Dart 是门很不错的语言,奈何它的对手太强了,compose 的 kotlin 、RN 的 ts + jsx 、MAUI 的 C#。在一众优秀语言里 Dart 反而是平庸的。
Flutter 的状态管理方案也很难评,Flutter 生态里没有可以媲美 vue3 、或者 React 的 zustand 、jotai 、valtio 的状态管理库。Riverpod 略显啰嗦,GetX 相当于买了个冰箱送了个油烟机。
在现下总的来看:MAUI 和 Compose Multiplatform 还 too young ,担心踩坑没人管,那么还是得看 React Native 和 Flutter 。RN 在性能上不输 Flutter ;语言层面 TypeScript + jsx 优于 Dart ;生态上 npm 比 dart 繁荣得多,微软、Shopify 、京东、美团、Discord 、小米 都在大规模使用 React Native 。
结论是推荐 React Native 。