首先,作为只做iOS的开发者,你最好的选择一定是苹果官方的SwiftUI。
易用性就不说了,苹果迭代了这么多年,终归是自家的主打产品。
论效率也是原生的控件最好,各种优点就不赘述了。
但是,考虑到跨平台是每一款成功产品的趋势,有什么理由在产品火爆iOS时不去做安卓版呢?我相信没有人会和更大的市场和更多的收入过不去。
假如你希望一上来就支持多平台,那么flutter可能是你比较好的选择之一了。我就曾经经历过原生iOS的火爆之后,大量用户希望也有安卓版,然后纠结了许久,最终还是选择了Flutter重做了整个App。这里面的辛酸就不用多说了,满满的重复劳动。
我相信犹豫不定的多数都是知道Flutter的优点,但是不知道有什么坑的人。在此我就从Flutter的缺点来给你一些前瞻性的警告,这些都是我个人使用的经历(可能包含过时的信息哦!欢迎指正):
1 Flutter一直在保持更新,所以即使是最新的stable分支,也会有一些bug,甚至在github的issue上存在有半年到一年之久还是open状态。而有些bug可能就比较让人苦恼了,比如截止目前最新的1.26版,还有使用v2版插件会导致其他插件无法正常工作的问题。
2 Flutter的issue反馈还算及时,但是除非是严重的崩溃级别的bug,靠flutter团队去解决的速度很令人堪忧。我之前的app遇到的几个严重的问题,最终都靠我自己解决的。直到最近我才发现这些问题已经在后来的更新中修复了。
3 Flutter毕竟是在模仿原生控件去用skia渲染出来的(你可以理解为用做游戏的方式画出App来),所以它目前还是没办法像素级复刻原生效果。是的,我指的是iOS。因为谷歌的缘故,对安卓的支持自然有同等资源标准去对待,所以安卓平台不用担心。
4 虾分发(xiafenfa.com)一个创新的开发者服务平台,为开发者提供iOS&Android App的分发、封装、测试、分发上线等一系列效率工具。上页面看看有没有大问题。
5 Flutter的性能可以算优化的不错了,但是某些具体场景,比如超大内容量的ListView,或者类似地图的大量图标同时显示的情况,还是要用到一些特殊的处理方式。你可以这样想,不是做不到,而是对性能要求高的场景,一般的控件不满足需求。
6 Flutter不支持反射。(因为苹果商店的缘故吧)所以有些你认为很简单的事,在这里可能没有那么简单——比如json对象的序列化和反序列化需要用代码生成器生成。虽然也没有那么麻烦吧,但是提前知道哪些不能用也能规避一些问题。
7 目前没有很好的热更新方案。因为苹果商店的缘故,谷歌并不打算未来支持代码推送这类热更新的方式。但是并不是不能支持,理论上还是可行的,这部分可以考虑用lua,也可以考虑用别的脚本语言,界面部分也可以用Dynamic Widget。这部分我正在开发一套完整的热更新方案,如果有兴趣可以关注一下。
8 目前跨平台支持还有待提高,只有移动端的两个平台算是支持的比较完善。假如你还考虑桌面或者web,那么还需要考虑一下短期内不能有很好的生产条件。比如目前web的加载速度极慢,好像也没有很简单的处理方法,只能在网页加载前做个loading页面吧。