如何评价Flutter?值的学吗?

Flutter是由Google开发的一款开源移动应用开发框架,它以其独特的优势在移动开发领域获得了广泛的关注和应用。不清楚Flutter是什么的话可以看看以下的视频介绍:

17 Flutter介绍-Flutter Windows Android环境搭建 真机调试

我们团队使用Flutter已经快三年了,有很多人问过我们对Flutter的评价。
今天在这里回顾一下三年前选择Flutter时的原因,以及Flutter在这几年中的实际表现如何。

一、跨平台性

Flutter的最大魅力之一在于其跨平台能力,能够实现iOS和Android两端的高度一致体验。也是得益于其独立渲染的架构,不需要再在不同端上分别进行UI细节的调试。Flutter允许开发者使用同一套代码库,同时构建iOS和Android平台的应用程序,甚至还可以扩展到Web、桌面(包括Windows、macOS和Linux)以及嵌入式设备。这种跨平台能力极大地减少了开发和维护的工作量,使得开发者能够更高效地推出产品,覆盖更广泛的用户群体。

二、高性能

Flutter不使用原生控件,而是实现了一个自绘引擎(如Impeller引擎),使用自身的布局、绘制系统。这使得Flutter应用能够达到接近原生应用的性能水平,同时保持跨平台的一致性和流畅的用户体验。此外,Flutter的渲染机制也非常高效,可以处理复杂的UI和动画效果,为用户提供出色的视觉和交互体验。

最开始吸引我们的就是其优秀的性能。
特别是独立渲染引擎,从架构上避免了其它基于原生渲染的跨平台框架的先天问题。

image.png

三、快速开发

Flutter提供了丰富的UI组件和工具,以及热重载(Hot Reload)技术,使得开发者能够在不重新启动应用的情况下实时查看代码更改的效果。这大大加快了开发周期,提高了开发效率。开发者可以快速迭代和调试应用程序,从而更快地将产品推向市场。

四、自定义UI

Flutter的UI组件是自绘的,不依赖于底层平台的原生控件。因此,开发者可以根据自己的需求和设计风格自由地构建用户界面,实现高度定制的用户体验。这种灵活性使得Flutter非常适合那些对UI设计有较高要求的应用场景。

五、丰富的生态系统和社区支持

Flutter拥有庞大的社区和活跃的开发者社区,可以分享和获取各种开源组件和解决方案。这为开发者提供了丰富的资源和支持,帮助他们更高效地开发应用程序。同时,Flutter也提供了丰富的开发工具和库,包括IDE插件、调试工具、测试框架等,进一步提升了开发效率和应用程序的质量。

六、学习曲线

虽然Flutter使用Dart语言作为开发语言,相对于一些流行的前端开发语言(如JavaScript)来说可能较为陌生,但Dart语言相对简单易学,对于初学者来说也更容易上手。此外,Flutter的文档和教程也非常完善,有助于开发者快速掌握开发技能。

七、客户端上最好的TDD支持

对于注重软件质量的我们来说,Flutter提供的优秀测试支持是一大福音。

image.png

TDD是我一直以来最为推崇的软件工程方法。
但是在客户端上因为其效率极低的单元测试解决方案,让TDD成为了一个极为复杂的事情。
Flutter的优秀单元测试能力,为客户端领域实现有实战价值的TDD流程带来了新的可能性。

八、挑战与不足

尽管Flutter具有诸多优势,但也存在一些挑战和不足。例如,Flutter框架需要开发人员具备一定的原生开发基础,否则在使用过程中可能会遇到一些困难。此外,Flutter的第三方SDK相对繁杂,选择合适的SDK可能会比较困难。同时,由于Flutter应用包含了自绘引擎和Dart运行时环境,因此其应用体积可能会相对较大。

综上所述,Flutter是一款功能强大、易于学习和使用的移动应用开发框架,具有跨平台、高性能、快速开发、自定义UI以及丰富的生态系统和社区支持等优势。然而,开发者在选择Flutter时也需要考虑到其学习曲线、第三方SDK选择以及应用体积等因素。对于那些追求高效开发和优质用户体验的开发者来说,Flutter无疑是一个值得考虑的选择。

使用三年,当初的判断都对了吗?

1、性能媲美原生

在大多数日常使用场景中,Flutter应用的性能几乎可以与原生应用媲美,用户难以察觉到差异。
特别是随着Impeller渲染引擎的引入,Flutter在图形处理和动画方面的表现更令人期待。
当然在极少数极端性能要求下,Flutter相较于原生应用仍可能略显逊色。
不过这也让Impeller更被期待了。

2、两端一致性非常好

早期因为原生和Flutter页面混杂情况比较多,每个需求都要安排Android和iOS各一个开发
从中期开始,我们发现一个开发者就能高效地完成大部分工作,另一端的同事仅需在遇到特定原生集成问题时提供支持。
到了后期,Flutter几乎成为新功能开发的唯一选择,大大简化了团队结构和沟通成本。
这时只需要安排一个开发即可,偶尔碰到原生问题协调另一端的原生开发临时帮忙看一下就行。

3、长期使用原生+Flutter的混合开发模式

我们的项目在切换到Flutter之前,已经上线很多年了。
经过不停的发展、迭代,已经积累了大量没有记录在文档中的隐藏功能和代码逻辑。
换句话说就是你不动他们,他们就能正常运行,
你随便改一点,就不一定会回发生什么事情。
所以我们最开始选择Flutter的时候,选择的策略就是混合开发、逐步过渡。

最开始的时候只把少数页面切换到Flutter上进行灰度测试。
确认了Flutter的稳定性和用户体验没有问题后才开始把Flutter座位正式项目的首选。
但也不是把所有的页面都迁移到Flutter。
而是新项目、新页面优先采用Flutter开发,老页面仍然保留原生。
只有在新需求中老页面的变动超过50%,才考虑迁移到Flutter重做一遍。
经过这几年的逐步替换,目前常用页面的80%已经切换到Flutter上面了。
剩下的页面有历史原因,有技术原因。
但是我们打算长期保持这种混合开发的状态,不会整体切换到Flutter。
这种灵活性让Flutter在保持跨平台优势的同时,没有牺牲对平台特性的支持。

4、开发效率比两端单独开发时节省60%的人力

近期的项目开发效率,对比切换到Flutter前,整个团队效率大约提升了60%。
这可能和很多人感觉的不太一样,大家普遍觉得会节省一半人力或者更少一点。
这主要取决于以下几个方面:
第一,真正的只写一次代码
不同于很多跨平台框架,仍然需要在不同的端上进行微调。
Flutter是真正意义的只写一次代码,调试通过后一般不需要再在各个平台进行二次调试了。
这部分确实是节省了40%以上的人力。
第二,高度两端一致性
我觉得这一点上收益最大的是产品和测试团队。
对产品团队来说,没有了以前一个功能点Android需要一周、iOS需要一天这种奇特的情况。
整个项目安排比以前顺畅和可控了很多。
对于测试团队来说,过去一个项目开发完,你去看bug列表,基本上Android和iOS是完全不一样的。
现在虽然为了保证质量,仍然会区分Android和iOS进行测试。
但是基本上一个Android和iOS发现的是一个bug,也只需要修改一次。
测试和回归的工作量就少了很多。
第三,TDD对开发流程的优化
基于Flutter的TDD流程给我们团队带来了很多影响比较深远的改变。
比如更可控的项目进度,更好的代码质量等等。
可以说TDD带来的人力成本的节省不次于少写一份代码。
下面就看看TDD都带来了哪些好处?

TDD带来的开发体验优化

a、提高代码质量
TDD迫使开发者从一开始就思考代码的设计和接口,这有助于编写出更加模块化、可重用和可维护的代码。
通过持续的测试,可以确保新添加的代码不会破坏现有功能。
b、加速开发流程
虽然TDD在项目初期可能会稍显缓慢,主要是因为人员的不熟悉。
但随着项目的进展,其优势会逐渐显现。
自动化的测试用例能够快速反馈代码的正确性,减少了手动测试的时间,使得开发者能够更加自信地进行重构和添加新功能。
基本上你基于TDD流程添加的代码,对其可靠性心里是很有底的。
不会出现写了很多天代码,一运行到处都崩的情况了。
c、减少长期维护成本
通过TDD开发的代码通常具有更高的稳定性和更低的缺陷率。
这意味着在产品发布后,团队将花费更少的时间在修复bug上,从而可以更专注于新功能的开发。
基于TDD提交测试的代码很少出现一个功能实现的不到位的情况。
bug主要出现在一开始写测试例时就没有考虑到的场景中。
d、促进团队协作
测试用例本身也是对需求的一种文档化,有助于新团队成员更快地理解项目和代码库。
这一点写过的同学应该比较有体会。
因为不同程序员的思路其实差异是很大的。
如果直接去读别人写的代码,理解起来相对会比较困难。
但如果从测试例入手去读代码,因为测试例本身一般模式相对比较固定,起名也带有很强的描述性。
所以我们很容易理解别人代码中每个函数的设计目标。

总之,测试驱动开发是一种强大的开发方法,尤其适用于Flutter这样的现代开发框架。
通过TDD,团队不仅能够提高代码的质量和稳定性,还能在长期内提升开发效率,减少维护成本。
对于追求高质量和高效开发的团队来说,TDD无疑是一个值得投资和采用的策略。
而这也是Flutter相对于原生和很多其它跨平台框架的独门优势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值