Alex Chueng's blogs
©2022 Alex Chueng's blogs
BACK
为什么放弃了 Flutter
6 min read
# Flutter# 观点
View

Flutter 很好。

但是我认为还在实验阶段。

Flutter 的前景怎么样?我认为还是不错的,至少可以和 ReactNative 形成竞争关系。

先看看优点:

  • Flutter 的跨平台实现方案能达到 60fps 的高性能渲染
  • 强类型语言 Dart
  • 构建的应用程序体积小,通常只有 3~5 M(不包含图片)

光第一条就很有吸引力。

但是缺点也不少:

  • 用 Dart 的嵌套式语法描述 UI ,又难用又难看,开发体验不如 ReactNative
  • 一套对标 Redux 的 BLoC 状态管理,有点晦涩
  • 生态不完善,基础工具不完善,影响业务开发效率
  • 移动端的生态不完善,又急着进军 web 领域,让人摸不着头脑的发展战略
  • 实际应用项目不多

看看咸鱼就知道了哈哈

总体来说缺点就是不成熟,而且需要在业务开发中投入额外精力参与建设 Flutter 的生态,这样肯定会导致业务进度缓慢的。

而且再加上这种 UI 描述语法,让习惯写 React 的我难以习惯融入。

随意感受下这嵌套语法:

onChangeAvatar() {
  showCupertinoModalPopup(
    builder: (BuildContext context) {
      return CupertinoActionSheet(
        actions: <Widget>[
          CupertinoActionSheetAction(
            child: Text('Take picture', style: TextStyle(fontSize: 16)),
            onPressed: () {
              Navigator.of(context).pop(false);
            },
          ),
          CupertinoActionSheetAction(
            child: Text('Galary', style: TextStyle(fontSize: 16)),
            onPressed: () {
              Navigator.of(context).pop(false);
            },
          ),
        ],
        cancelButton: CupertinoActionSheetAction(
          child: Text('Cancel', style: TextStyle(fontSize: 16)),
          onPressed: () {
            Navigator.pop(context);
          },
        ),
      );
    },
    context: context
  );
}

就像全程使用 React.createElement() 开发 React 应用一样。


Google 的野心很大,想要用 Flutter 统一 web 和 app 的开发,最新的 Flutter 也支持直接生成 web 应用。

专注的移动端应用的生态和开发体验并没有做好,反而大举进军 web 领域,这不禁让人怀疑又是 KPI 的产物。反而是 ReactNative 受到 Flutter 刺激,更加务实了,重写了 JS 引擎,将 ReactNative 的性能提高一个档次。

优秀的框架应该是让开发者用的舒适的,可以乐在其中,共同建设生态的。这方面 React 就做的很好,基于 React 衍生出各种优秀工具,像 ReactNative、Gatsby、Next,都大大提高生产力。成功的一部分原因是结合 HTML 和 JS 的 JSX 语法,用起来舒心。

为了保证业务进度,还是选择 ReactNative 会更适合。


综上所述,以下几个理由让我放弃了 Flutter:

  • 生态不完善,导致开发业务进度缓慢
  • 语法难用,导致开发效率不高
  • 发展战略不明朗