第一次用Flutter的时候,我确实被那个丝滑的动画震撼到了。项目里写了一个复杂的滑动卡片效果,用原生iOS写要调UIScrollView和UIView动画,得花一天。Flutter里一个AnimationController加SlideTransition搞定,当时我觉得这就是未来。但三个项目做下来,我开始怀疑这个“未来”是不是被过度包装了。
最让我难受的是内存。一个简单的列表页,图片加上网络缓存,轻轻松松跑到200MB以上。对比用React Native或者原生,基本上能压到一半。有人说是Dart的GC问题,也有人说是Skia的纹理内存,可不管真相是什么,用户不会听你解释。而且包体积也感人,一个Hello World就是十几MB,加个地图SDK直接奔着三十去了。所谓“一套代码跑所有平台”,代价全让用户吃了。
还有一个被官方避而不谈的坑:Flutter的更新太激进。去年用的库,今年API全变了,社区维护根本跟不上。我升级到3.x之后,好几个插件直接放弃支持,只能自己改源码。相比之下,React Native虽然也乱,但至少原生桥接的方式让很多库能延续。Flutter的Widget和渲染逻辑绑得太紧,一旦框架改框架,你的所有自定义绘制全得重写。这哪里是高效?根本是把自己绑上了特快列车,中途下车就得跳车。
我并不是说Flutter一无是处。它的动画体验和开发效率确实高,适合做MVP或者偏展示类型的应用。但如果你想做一个业务复杂、长期维护的项目,我劝你冷静一下。现在很多人宣扬“跨平台统一”,好像用Flutter就能解决一切。但真相是,每个平台都有它自己的倔强,你以为躲开了JNI和Bridge,其实躲不开底层硬件的复杂。也许我们需要的是更务实的混合方案,而不是把孩子跟洗澡水一起倒掉。