《架构师》2021年4月
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

卷首语

Flutter 2.0来了,而他们早已率先应用了Flutter

作者 田晓旭

2020年3月4日,谷歌发布了Flutter 2.0,这个版本是Flutter的重大升级,开发人员可以基于此从同一代码库构建跨平台软件,并在任何平台上快速构建可移植的应用程序。

2018年12月5日,Google在Flutter Live上宣布正式发布Flutter 1.0 。当时,Flutter的主要目标还是iOS和Android。而现在Flutter 2.0支持使用相同的代码库将本地应用程序发布到5个操作系统,分别是iOS、Android、Windows、macOS和Linux,甚至它还可以嵌入到汽车、电视和智能家电中。

Flutter 2.0的发布意味着Flutter已经从移动开发框架扩展为一个可移植框架,对于Flutter的应用,很多开发者都跃跃欲试。根据谷歌2020年公布的数据来看,截至2020年第一季度,Flutter共吸引了超过200万开发者,每月活跃的开发人员数量有将近50万,Google Play Store上的Flutter应用约为5万个。而现在,Google Play Store上Flutter支持的应用程序已经增长到15万个了。

一个新技术的普及,企业级应用一定会先在头部互联网企业产生,并逐步优化降低门槛。那么国内都有哪些企业率先实践了Flutter?他们具体是怎么应用的?下面我们总结了一些比较典型的企业应用案例。

## 贝壳Flutter混合容器实践

通常纯Flutter应用的页面路由直接由Flutter自身来管理,但是对于原生App要引入Flutter技术,就会涉及原生页面与Flutter页面之间切换,此时的页面路由需要单独管理和实现。

在实践Flutter混合容器时,贝壳对比了Flutter官方和闲鱼FlutterBoost两种实现方式。通过八个方面的对比,最终选择了在整体方案上采用官方1.12的共享引擎的方式,在路由管理的实现上借鉴闲鱼FlutterBoost的实现。

贝壳容器方案整体架构图

具体实践:《贝壳Flutter混合容器实践

美团外卖Flutter动态化实践

美团外卖的用户端和商家端因为业务特点不同,因此采用的技术方案也不同。用户端的用户量庞大,对动态性要求更高,在低PV页面使用了RN来做页面级的跨端动态化,而在高PV页面使用了自研的区块级动态化和触达提升;商家端页面复杂度更高,用户端实现的小功能,在商家端配置时有很深的层级和复杂的联动组件,同时商家端还会关联到发配送等复杂逻辑,因此商家端在选型时更看重跨平台框架的性能瓶颈与双端一致性。

早期,美团外卖商家端也曾尝试使用RN作为跨平台的技术方案,但过渡版本无法达到预期的要求。这时,Flutter “多端一致”和“渲染性能”上的优势让美团外卖团队眼前一亮,因此决定选用Flutter方案。但当时Flutter仍处于发展阶段,很多功能和解决方案都不完善,尤其是在动态化方面,还没有成熟且大范围落地的方案,而美团外卖商家端业务发展对于动态化需求又非常强烈,因此美团外卖内部立项了Flap项目,专门来支撑Flutter动态化能力。

美团Flap项目是一套完整的业务解决方案,支持大厂应用的复杂业务,而不是重展示轻交互或是UI与动态模板的方案。Flap项目使用纯Dart语言实现,在不引入其它技术栈的情况下,实现了视图与逻辑一体化的动态化方案。

据了解,截至2020年底,美团外卖业务已经真实上线了100+ Flap页面,40+业务模块。商家端的跨端与动态化覆盖度达到90% 左右,同时在多个业务线实行需求动态发布流程,可动态上线的需求占比60~80%。

具体实践:《纯Dart的挑战:美团外卖Flutter动态化实践

京东技术中台的Flutter实践

京东很早就开始研究跨端的开发解决方案,最早使用的是Hybrid App技术方案,2015年底开始转向RN技术栈,2018年中,开始关注Flutter技术。

随着京东内部越来越多团队使用Flutter,京东内部发布了JDFlutter引擎。在Flutter官方引擎的基础上,做了功能扩展和优化,包括Flutter工程改造、路由及多页面管理、扩展UI组件库、原生能力扩展和Android端动态化支持。

JDFlutter整体框架结构

具体实践:《京东技术中台的Flutter实践之路

飞猪App的Flutter实践

2013年,随着阿里巴巴All in Mobile,飞猪(当时还叫阿里旅行)也有了独立的App。随着业务的不断发展,App变得越来越臃肿,技术改造带来研发效率/性能体验提升的同时,也增加了维护的复杂度。由于旅行业务域逻辑复杂,在实际交付时会出现两端开发理解偏差引发的线上问题,例如机票交易链路因为漏测引发线上故障。

从技术方案来看,两端的具体实现依赖原生能力,系统平台层的差异带来了业务表现的差异,这需要更底层的技术方案来解决。在对比了Native、动态模板、H5、Weex、Flutter等多个方案之后,飞猪最终选择了Flutter。

2019年,飞猪开始在商家版EBK改造项目上试水Flutter,在研发效率和用户体验上都有不错的收益。随着Flutter混合技术栈的完善,2020年飞猪Android端在机票航变和酒店相关简单业务做了Flutter试水,对接的首个版本是1.12,最终稳定性和性能都符合预期,类似机票航班详情页的需求一人就可以完成。

具体实践:《飞猪Flutter技术演进及业务改造实践

Flutter 2.0发布带来了更多的功能和特性,随着插件生态的丰富和社区生态的完善,相信Flutter的进入门槛会进一步降低,期待未来有更多的企业实践案例。