一、项目背景

为了能够帮助城市BD人员提高工作效率,摆脱电脑束缚,能够随时随地对我们平台订单及跑男进行调度,我们研发了手机版的城市管理后台,命名为城市运营助手,为了提高人效,实现快速开发,我们选用跨平台开发语言Flutter,一套代码兼容多种开发平台,安卓、iOS、电脑端通用。

二、项目需求

1、登录模块:app需要账号密码或者钉钉企业号登录。

2、数据中心:BD在数据中心可以查看所在城市的订单情况(未接订单数、完成订单数、在线跑男数等等)

3、调度模块:BD可以通过订单编号等查看订单情况,进行实时指派,根据跑男编号等查询跑男身上订单情况,进行跑男调度,也可以查询用户、商户信息,帮用户、商户解决订单问题。

三、设计与实现

登录模块:

Flutter实现代码片段:

iOS实现代码片段:

       对比Flutter和iOS原生的实现代码可以发现,Flutter代码的布局是类似于Div容器一层一层向内部添加控件,语法更接近与前端写法,控件间的布局使用相对布局,控件布局之前的关联性比较大,而iOS代码,通过可视化工具添加每个控件,然后通过代码辅助设置每个控件的属性,也可以通过相对父视图的坐标点使用纯代码添加,相对来说每个控件的布局都可以相对其他控件独立,控件之间的关联性不大,单相对来说,Flutter的使用dart语言开发,他的写法比较简单、直观,控件的style可以在一个方法中全部设置,而iOS使用OC语言,更多的使用[]语法,每个属性样式单独设置,这种写法代码看起来比较整齐,但是实际会增加代码量。

       我们除了账号密码登录之外,还添加了钉钉企业号快速登录,需要集成第三方SDK,使用Flutter语言开发要实现与三方的对接比较困难,因为第三方对外的暴露的api一般都是针对与原生、后台、前端等,针对跨平台开发的方案比较少,所以我们一般是iOS或者安卓集成第三方SDK,实现功能,与Flutter进行桥接,Flutter通过桥接方法调起原生代码,原生代码调用第三方SDK的Api,调起要实现的功能,功能实现后,第三方SDK会将结果回调给原生,原生再通过桥接方法,将结果回调给Flutter,过程比较复杂,需要原生代码做一个中间层,而iOS原生实现与第三方对接就比较简单,直接集成第三方SDK,调动第三方Api,实现功能,所有的逻辑处理,都直接再原生实现,没有中间层,当然,这是跨平台开发语言的通病,不管使用Flutter,还是其他跨平台语言,都会出现类似问题,也算一个小小的槽点。

数据中心:

Flutter实现当前未接订单代码片段:

iOS实现当前未接订单代码片段:

       由于整个界面数据中心实现逻辑比较复杂,代码量庞大,以上只是截取当前未接订单模块Flutter实现代码和iOS实现代码片段对比,对比后可发现,对于比较复杂的布局来讲,Flutter实现起来会比iOS原生要复杂一点,Flutter是纯代码进行布局,然后数据加载,数据计算,也是由代码进行控制,这样就导致复杂功能Flutter实现代码量比较大,但iOS原生实现,由于可以进行可视化工具添加控件布局,通过拖拽方式,添加控件,约束添加布局,再添加少量代码修饰layer样式,数据加载,数据计算,所以实现起来相对而言,要便捷快速,运行起来,对比复杂界面原生代码实现的效果也会比Flutter代码实现的界面更加流畅、丝滑。

人员管理:

Flutter实现列表类界面布局代码片段

列表零件代码:

列表部件代码

iOS实现列表类界面布局代码片段

       对于列表类布局界面,由于Flutter没有类似的控件,所以列表每个零件、部件都要自己封装,然后部件中重复复用封装好的零件代码,列表复用部件加载,这样对封装的零件和部件进行复用,实现列表效果,iOS中有大量的官方控件,尤其是列表类的控件,非常多,常用的有ScrollView、TableView、CollectionView,每个列表控件又有对应的cell部件,再加上可视化工具,拖拽起来会方便的多,当然两者都有优缺点,Flutter没有官方控件,所以大部分控件要自己封装,但是自己封装的控件会更加灵活,更容易扩展,iOS原生有很多官方控件,大部分情况下,使用起来很方面,但是对于控件扩展方面的局限性比较大,所以两者都各具特点。

四、总结

本篇文章站在iOS开发的角度,通过与实际项目的结合更直观的介绍了,Flutter跨平台开发与iOS原生开发的区别,总结来讲,Flutter开发相对来说,开发效率更高,一套代码部署多个平台,代码相对少,语法更加直观,但是较复杂的界面或者效果,实现起来效果不如原生平滑、自然,与第三方对接也会比较麻烦,需要原生作为中间层桥接,反观iOS原生开发,代码量会比Flutter多,OC语言语法相对于其他语言语法区别较大,但是毕竟作为原生开发,肯定有自己的优势,复杂界面或者效果处理,动态渲染,流畅度都是其他语言不能比的,所以在项目中到底使用跨平台语言开发还是使用原生语言开发,我们还是根据实际情况,酌情考虑。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注