使用Flutter完成10个商业项目后的经验教训

做者:Łukasz Kosman 和 Jakub Wojtczakreact

原文:https://medium.com/swlh/lessons-learned-after-making-the-first-10-commercial-apps-in-flutter-f420808048cdandroid

在过去的24个月中,咱们花费 17.193,00 个小时使用 Flutter 完成了10个商业应用程序,本文将分享咱们的看法。ios

阅读本文后,您将学习到:git

  • 选择Flutter的缘由是什么? Flutter对预算和稳定性有什么影响?
  • Flutter准备好用于企业应用程序了吗?
  • 与Xamarin相比,Flutter的表现如何?
  • Flutter适合哪些项目?

自2018年7月在LeanCode上开始在Flutter上开发咱们的第一个商业应用程序以来,到如今已经有两年了,当我第一次了解Flutter时,尽管它颇有前景,但我仍然持怀疑态度,主要是由于咱们最近对Xamarin的投资给咱们带来了负面体验。 因为咱们的团队一直但愿在项目中使用一些激动人心的新技术,所以咱们但愿它可以证实它能给客户带来真正的价值。算法

这是一个农业项目,与牧群管理打交道,这是一个很是有趣并且典型的项目,管理员使用该系统来计算对谷仓的需求,而咱们的团队认为,从UX的角度来看,这是一个很好的看法。数据库

在两天内,他们自豪地展现了概念验证方案,证实了制做动画很是容易,能够为您带来出色而流畅的体验。最终,这已演变为完整比例的动画,您能够在此处看到:编程

有了这个喜悦,我确信Flutter值得尝试。后端

最初,咱们没有将本身100%投入Flutter,而是与 React Native 项目并行进行。在没有Flutter团队官方支持的状况下编写第一个Google Maps实现,对此我感到悲观。您能够在此处了解有关在Flutter中编写第一个商业应用程序的经验以及相关困难的更多信息。最终,咱们交付的是一个相对简单的应用程序,少于40个视图,且Flutter开发时间不到500小时。安全

自从咱们交付了第一个应用程序并从客户那里收集到了五星级好评,咱们认为,咱们应该开始更加积极地向客户推荐Flutter。从2019年5月开始,咱们决定Flutter将是咱们移动技术的第一选择。同时,咱们将中止在其余不一样框架上开发应用程序的工做。服务器

自那时以来,咱们已经在Flutter中交付了10多种移动产品,并提供了数十种MVP / PoC。如今,该得出结论了。

Flutter 更快

咱们并未在这里讨论理论方法(在此处能够查找Bran De Connick的论文),尽管这也颇有趣。后来咱们重写了基于 Xamarin 和 ReactJS 的App,将两者进行对比,在后端使用相同API的状况下,与Xamarin(667h vs 987h)相比,咱们减小了33%的时间,使用ReactJS(486h vs 704h)相比,则减小了31%的时间。

停下来思考一下这些数字。这些数据回答了如何更快,更便宜地构建移动应用程序(使用Flutter)。随着经济不景气,在预算范围内按时交付产品变得愈来愈重要。这也意味着对于相同的预算,您能够多交付50%的订单。想象一下,您是一名产品负责人,负责开发团队的优先事项,可以将预算壁垒进一步提升50%。

这将极大地提升团队的创造力和他们交付的工做质量。有关GastroJob案例的详细分析,请查看咱们在Flutter Europe Conference上的演讲,或在此处查看咱们的案例研究。

平均90%的代码在iOS和Android之间共享。

咱们的90%的代码不会在两个本机平台上都编写两次。与本地应用程序开发相比,节省了90%的时间,而且因为一致性和团队围绕一个目标团结而不是分红两个本地流,所以释放了不少创造力。除了共享业务逻辑和用户体验外,咱们还可使用大量现成的库,这些库带来了更多的好处。首先,他们能够经过为应用程序内使用的许多不一样事物提供经常使用逻辑来加快开发过程(例如与服务器(HTTP客户端)的通讯,推送通知,安全存储,数据库,动画等)。其次,与许多流行的服务(例如Firebase,地图,支付,社交登陆,分析,崩溃报告服务等)集成起来更加容易。所以,只有在编写特定于平台的自定义代码时,才须要编写两次代码(分别适用于iOS和Android)。可是,即便那样,在Dart和本机代码之间进行桥接仍是至关合理的 简单,这将在本文后面进行解释。

更重要的是,若是考虑到质量因素,则能够节省更多,所以从长远来看,该应用程序的维护成本也更低。事实上,咱们研究在Xamarin,React Native和Flutter构建的全部项目中修复bug的时间,,Flutter一般须要8–10%的修复bug时间。而 React Native 须要7–14%,Xamarin 须要11–23%。

与UX / UI的合做从未如此之好

在Flutter项目期间,须要UX / UI设计师和开发人员之间进行合做。多是由于他们不须要进行这种乏味的本地改编,而使他们的创造力松散。可是,从React Native团队的经验中也能够指望获得一样的结果,事实并不是如此。当咱们更深刻地挖掘时,咱们发现Flutter为可以编写漂亮界面的开发人员带来了纯粹的欢乐,之前这些界面会带来额外的负担,从而减慢了步伐。所以,他们更愿意合做,而且咱们已经看到结对编程会议开始于设计师与开发人员携手进行现场实验的过程当中。通过几回这样的互动,得益于强大的主题引擎,团队可以为该应用程序提供一种自适应的设计语言,该语言不只在Figma或Adobe XD中看起来很棒,并且还提供了最佳的用户体验以及连贯的感受。正确的设计顺序。怎么样 在项目的整个生命周期中保持这种连贯性也颇有趣。 之前,当UX / UI设计师在演示会议上审查产品时,他们在项目结束时拥有大部分评论,在实践经验以后改变主意或简化事情。 Flutter的独特之处在于,在项目结束时,设计师的参与已彻底消失,由于他们在试验和错误的设计循环的初期就开始工做。 这也意味着后续sprint的优化花费的时间更少,而且这种持续的合做体如今下一个发行版的稳定Scrum速度上。

动画是如此的简单和实惠

在Flutter中实现静态视图不只容易,并且在动画方面也提供了许多新的机会。这将这种UX-DEV的合做推向了新的高度,从而实现了史无前例的出色过渡效果。到目前为止,这仅对大型预算项目而言是典型的。现在,感谢Flutter,全部开发人员均可以使用它。之因此会发生这种状况,是由于Flutter能够直接在画布上进行渲染,而且能够彻底控制图形,这使咱们可以在全部平台上建立像素完美的图像,而无需像其余跨平台框架同样进行附加的条件格式设置。例如,在使用React Native进行绘制时,您基于默认视图,这些视图能够改变新控件的外观,所以,构建了一个臭代码,该代码依赖于平台,而且与共享代码不该采用的方法直接矛盾进入部署平台。

Flutter应用程序更轻巧

面对PWA业务选择时,PWA证实了在手机上添加快捷方式来像保存应用程序同样保存网站是多么容易。咱们先不讨论用户体验,而只考虑下载应用程序的负担。是的,在两种状况下都并不是易事。根据SimiCart博客,最佳PWA网站要求用户在加载时从4.9MB到11.6MB。这远远低于咱们的Xamarin应用程序的平均大小25MB,甚至低于咱们的React Native 32MB应用程序的平均大小,但很是接近Flutter的平均值11MB,全部Flutter应用程序的范围为9-14MB (请注意,尽管这些数字突出显示了模式,但它们不能直接比较)。您必须认可,对于本机应用程序体验,平滑的外观,快速的反应以及本机应用程序典型的全部服务(例如推送通知)而言,此(11MB)的空间很是低。这意味着没有障碍。 用户下载该应用程序,并开始与全部插件和集成一块儿尽量高效地使用它。 这也意味着应用程序性能更高,由于它们可使用较小的代码执行相似的任务。 与其余跨平台框架相比,这种性能上的提高直接转化为毫秒数,从而为您提供了较冷的应用程序,动画,CPU和内存使用方面的更快体验(实际上,在Flutter能够提供更好的冷启动应用程序的状况下,即便相比 到Swift / Kotlin本机应用程序)。

须要时能够访问本机代码。

Flutter的优势在于,移动团队更但愿使用本机代码并编写一些Kotlin / Swift软件包,由于它们能够彻底控制本机实现,而Xamarin就是这种状况最终代码在一个孤立的黑匣子中生成。到本机代码的桥也更强大,由于它们是彻底透明的,所以对于从本机环境转移过来的开发人员来讲更友好。因为采用了这种方法,所以能够轻松实现特定功能,例如本地支付提供商或一些复杂的库。更重要的是,即便是须要生物特征识别算法进行面部识别或指纹检查的高级功能,也能够在Flutter上顺利运行,这是由ING商业在Flutter中开发的银行应用程序展现的,该应用程序是在JakubBiliński在Flutter Warsaw Meetup上展现的(连接)。

Flutter中的概念很是简单

当咱们须要构建概念证实以检查最危险的假设测试时,与本机代码的集成带来的其余好处。这意味着在客户决定签署整个项目的合同以前,咱们能够构建最小的应用程序,以回答最关键的业务或技术问题。在这一点上,咱们不能高估Flutter的功能。每次咱们将此类计划定为两天的开发时间,试图找出在这么短的时间内能够实现的目标。到目前为止,咱们正在尝试各类PoC,包括支持AR的图像检测系统(以下),

经过白板图纸绘制高级动画。

创建快速的PoC不只使咱们可以展现开发的速度,并且还有助于咱们为最终项目提供更准确的估算。

开发人员很高兴

从创建内部团队的角度来看,Flutter被证实是一个不错的选择。最初,Flutter开发人员不多,由于没有专业经验。可是,与开发人员具备C#背景的Xamarin相比,状况有所不一样,在Flutter的状况下,全部候选人都是已经从本地(主要是Android)背景转移的移动开发人员。随着Flutter变得愈来愈受欢迎,而且因为社区组织的活跃以及按期聚会和网络研讨会的兴起,可用的候选人数量呈指数增加,现在,有大量的专业人士愿意在Flutter项目中寻找工做通过多年的本机应用程序开发,咱们改变了见解。得益于文件详尽的Flutter代码以及社区提供的其余库的可用性,进行此类转移很是容易。所以,一些之前拥有独立移动团队的公司 正在投资以使它们围绕Flutter。 在LeanCode,咱们甚至组织了Flutter训练营,在湖边进行了为期三天的培训计划,以提供动手经验,并为密集的,为期两个月的学习计划选择最佳人选,在那里学习Flutter 伴随着作一些非商业项目。 咱们惊讶地注意到,通过9个星期的培训,开发人员准备与他们的同事并肩工做,他们从早期就开始在Flutter中进行编码。 如此短暂的学习周期证实,从企业主的角度出发,选择从本地应用程序切换到Flutter并非一场革命,而是一场内部团队能够发挥重要做用的演变。

对技术栈作出正确的决定可能会对您的业务和我的职业产生持久的影响。然而,不多有选择如此简单。 Flutter已经成为不可阻挡的运动,不可忽视的力量,而且它仍在发展并向具备银行或保险等极高质量标准的很是保守的行业扩展(例如NuBank,ING和AXA等)。

若是考虑到甚至在生产阶段发布Flutter for Web或Flutter for Desktop以前都会发生这种状况,则代表Flutter for mobile具备足够的价值,能够在这个很是先进的市场上竞争。不管您从事的行业是什么,早期采用者的时代都已通过去,咱们很快就会见证愈来愈多的成熟参与者进入Flutter生态系统。我但愿这将使咱们可以在Flutter中制做出另外10款出色的应用程序后,在明年的总结中分享从这些实现中学到的经验教训。

交流

老孟Flutter博客(330个控件用法+实战入门系列文章):http://laomengit.com

欢迎加入Flutter交流群(微信:laomengit)、关注公众号【老孟Flutter】: