为什么我个人开发 Android 应用,首选 Flutter?
我做过原生 Android(Java/Kotlin),用过 Uniapp,也试过 React Native。折腾了一圈之后,现在个人项目做移动端,基本上只用 Flutter。
这篇文章不是什么官方文档复读。就是一个写代码的人,聊聊为什么 Flutter 成了我的主力工具。
Flutter 到底是什么?
Flutter 是 Google 在 2018 年推出的跨平台 UI 框架。核心卖点就一个:一套 Dart 代码,同时跑在 Android、iOS、Web 和桌面上。
但它跟 Uniapp、React Native 完全不是一路子。Flutter 不依赖操作系统的原生控件——它自带一个叫 Skia(现在是 Impeller)的渲染引擎,直接在画布上画界面。换句话说,你看到的按钮、文字、动画,全是 Flutter 自己画的,跟 Android 的 TextView 或者 iOS 的 UIButton 没关系。
这决定了它跟其他跨平台方案的本质差异。
为什么不用原生开发?
先说清楚:原生开发不差。Kotlin + Jetpack Compose 写 Android,或者 SwiftUI 写 iOS,都是正经选择。
但对个人开发者来说,有个很现实的问题:你只有一个脑子、两只手。
同时维护 Android 和 iOS 两套代码,工作量翻倍。界面逻辑要写两遍,bug 要修两遍,API 对接要调两遍。个人项目或者小团队,根本扛不住这种人力成本。
有人说「我只需要 Android 端啊,写原生不就好了?」——问题是万一哪天你想上 iOS 呢?给你自己留条后路没坏处。Flutter 一套代码两个端,不是省了 50% 的工作量,是直接砍掉了维护 iOS 端的心理负担。
为什么不用 Uniapp?
Uniapp 在国内市场占有率很高,主要原因是它基于 Vue.js,前端开发者上手的门槛极低。
但 Uniapp 有个绕不开的问题:它本质上跑在 WebView 里。是的,它有原生渲染模式(nvue),但主要生态和组件都以 WebView 为基础。这意味着:
性能不够。 复杂动画、长列表、频繁的 UI 更新——WebView 方案在这些场景下就是不如原生。你打开一个 Uniapp 做的应用,滑动一下长列表,帧率波动肉眼可见。
体验不够原生。 WebView 渲染出来的东西,不管怎么调,都跟真正的原生控件有微妙差别。弹窗动画、键盘弹出行为、页面转场——这些细节用户不一定说清楚哪里不对,但他们会觉得「这 App 不太流畅」。
坑多。 Uniapp 的「一套代码多端运行」听起来很美,实际开发中你会发现不同端的表现差异大到你怀疑人生。调完了 Android 的样式,iOS 上又炸了。修好了 iOS,小程序端又不对了。时间全花在适配上了。
Uniapp 不是不能用——如果你本来就是做小程序的,或者需求特别简单、对性能没要求,它能帮你快速出货。但如果要做一个你自己用了都觉得舒服的 App,Uniapp 不太够。
Flutter 的优点
性能接近原生。 Flutter 的渲染引擎直接跟 GPU 打交道,不走平台桥接层。动画帧率稳定在 60fps 甚至 120fps,复杂 UI 不卡顿。这对移动端体验来说是质的差别。
热重载爽到飞起。 改一行代码,保存,一秒后在手机上看到效果。不用重新编译,不用等 Gradle build。这个反馈速度对个人开发来说就是生产力。
Dart 语言比想象中好。 很多人一听到新语言就抗拒。但 Dart 其实就是 Java 和 JavaScript 的结合体——如果你会这两种语言中的任何一种,Dart 学起来不超过一个下午。类型系统比 JS 严谨,语法比 Java 简洁。
Widget 体系虽然深,但逻辑一致。 Flutter 里一切都是 Widget。你写布局是 Widget,加 padding 是 Widget,做动画也是 Widget。一开始会觉得嵌套很深,但习惯之后你会发现它的组合能力极强——复杂的 UI = 小 Widget 的组合,思路清晰。
跨平台一致性是真的稳。 因为 Flutter 不依赖原生控件,你在 Android 上看到的界面在 iOS 上完全一样。这对追求 UI 一致性的项目来说是巨大优势。
生态越来越好。 pub.dev 上的 package 数量已经超过四万个。常用的需求——网络请求、状态管理、数据库、图表、推送——全有成熟的库。
Google 在持续投入。 Flutter 是 Google 的战略级产品,不是实验项目。2024 年 Flutter 已经是 Google Home、Google Pay 等内部产品的技术栈。不用担心它突然没人维护。
Flutter 的缺点
安装包体积偏大。 一个 Flutter 的 Hello World 打包出来大概 15-20MB,比原生 Kotlin 的 3-5MB 大不少。Google 一直在优化这个问题,但短期内不可能追平原生。
Widget 嵌套会让人自闭。 写习惯了还好,但新手看着十几层嵌套的代码确实会崩溃。特别是复杂布局,代码的视觉密度很高。
平台差异化功能需要额外处理。 比如 Android 的 Material You 主题色、iOS 的毛玻璃效果——这些平台特有功能 Flutter 不会自动适配,需要自己写判断或者找第三方包。
Dart 的就业市场不如 Kotlin/Swift。 如果你学 Flutter 是为了找工作,目前原生 Android/iOS 开发岗位还是更多。Flutter 更多是个人项目和小团队的天下。
Web 端表现还不够好。 Flutter Web 的首次加载时间长、SEO 不友好。做 Web 的话,React/Vue 还是更合适。
我的实际体验
我用 Flutter 做了几个个人项目,从工具类 App 到数据展示类应用都有。最直观的感受是:开发速度确实快,但这不是 Flutter 最大的优势。
最大的优势是不用纠结。
不用纠结「这个效果 Android 上好做 iOS 上怎么办」,不用纠结「这个第三方库有没有 iOS 版本」,不用纠结「这个 bug 是不是 WebView 的问题」。
一套代码,跑两个平台,表现基本一致。对个人开发者来说,这种确定性比任何技术指标都重要。
什么人该用 Flutter?
- 个人开发者或小团队做移动端项目
- 需要同时覆盖 Android 和 iOS
- 对 UI 流畅度和体验有要求
- 愿意学一门新语言(Dart)
- 项目不是纯 Web 端
什么人不该用 Flutter?
- 只做微信小程序(Uniapp 更适合)
- 只做一个平台且对包体积极其敏感(原生更合适)
- 团队全是前端 Vue 开发者且需求简单(Uniapp 上手成本更低)
- 做大厂项目且公司技术栈已经是 RN(别跟组织架构较劲)
最后
技术选型没有银弹。Flutter 不是完美的,原生也不是过时的,Uniapp 也不是垃圾。每个工具都有最适合它的场景。
对我个人来说——几个人、几个项目、想快速做出能看的移动端产品——Flutter 是最省心的那个。它不一定是世上最好的框架,但它是我用起来最不累的。
工具这东西,顺手比强大重要。顺手你才会一直用,一直用才能真的用好。