从2015年Dart开发者峰会的首次亮相,到目前2.81的稳定版,Flutter跨平台技术被Google发布以来,人气一直居高不下,GitHub关注度一直趋于前列。因为它宣传的一套代码就可以构建适用于移动、web、桌面、和嵌入式平台的精美应用,给开发者们带来了巨大的吸引力。节省了开发成本与时间,那把Flutter用在实际生产环境中,真的比原生更优秀吗?
在我使用Flutter构建移动应用过程中,感觉UI开发效率确实更高一些。Flutter 采用声明式编程,这也就意味着 Flutter 构建的用户界面就是应用的当前状态。熟悉了Flutter的声明式UI写法较传统的xml式布局效率更快。Android目前不是也在大力推进MAD( Modern Android Development:现代安卓开发)里的Compose嘛,这是Android 上 UI 开发方式的重大变革,有人说掌握了Flutter的声明式UI写法就掌握了70%的Compose写法~,其次flutter中万物皆是Widget,系统内置了许多的小组件,但在商业项目中,我们要根据UI的设计稿进行还原,但系统没有怎么办??没关系,没有可以自定义呀!我们可以自定义封装一个个需要的小组件,这样就可以完美还原UI的设计稿(当然别忘了多机型适配。。)
使用Flutter开发项目时,肯定会遇到状态管理:“响应式的编程框架中都会有一个永恒的主题——“状态(State)管理”,无论是在 React/Vue(两者都是支持响应式编程的 Web 开发框架)还是 Flutter 中,他们讨论的问题和解决的思想都是一致的。”—— 《Flutter实战》
可以简单的理解如果一个页面会变化(如后端传入的数据改变),那么这个页面的状态就是可以改变的。系统内置了StatelessWidget(不需要维护状态的场景)和StatefulWidget(需要维护状态,StatefulWidget 类会对应一个 State 类,State表示与其对应的 StatefulWidget 要维护的状态)两种常用的状态组件。如果应用很庞大复杂,使用state来处理页面刷新就显得有些麻烦,这时就可以使用pub.dev(Dart和Flatter应用程序的官方软件包存储库)上的状态管理工具:Get ,Provider,
Bloc,fish_redux等等,这么多管理工具本人使用强烈推荐Get ! ! ! Get也是Pub.dev上排名第一的第三方库哦
Get的三大核心:状态管理,路由管理,依赖注入。Get中有Obx()和Get.Build()两种方式刷新组件,看看官方文档很容易学会。能极大帮助Flutter开发,不仅可以管理状态,还有许多待你发现的其他功能:语言本地化,持久化存储,带参路由传递....(不亏是No.1)
还有就是网络请求了,Flutter中隆重推荐 Dio,什么?你android开发用惯了Retrofit ? 换!
你肯定会遇到屏幕适配的问题,在此推荐 screenutil
Pub.dev上还有许多的第三方库,真实商业项目开发中你会遇到许多问题,这时就需要你自己去耐心发现了。
总的来说Flutter的开发效率较原生是提升了许多。对企业来说,以往一个应用需要Android和IOS两端工程师开发,现在只需要Flutter工程师即可,节省了成本。而且,Flutter的性能是不输于原生的。“Flutter 与用于构建移动应用程序的其它大多数框架不同,因为 Flutter 既不使用 WebView,也不使用操作系统的原生控件。 相反,Flutter 使用自己的高性能渲染引擎来绘制 Widget(组件)。这样不仅可以保证在 Android 和iOS 上 UI 的一致性,也可以避免对原生控件依赖而带来的限制及高昂的维护成本。Flutter 底层使用 Skia 作为其 2D 渲染引擎,Skia 是 Google的一个 2D 图形处理函数库,包含字型、坐标转换,以及点阵图,它们都有高效能且简洁的表现。Skia 是跨平台的,并提供了非常友好的 API,目前 Google Chrome浏览器和 Android 均采用 Skia 作为其 2D 绘图引擎。”—— 《Flutter开发实战》
最后我想说,技术的最终目的是为了解决问题,或者更好的解决问题,它是用来服务于实际业务环境的。新技术层出不穷,作为开发者,该如何对待老技术、如何看待层出不穷、前途不明的新技术?Flutter与Dart的频繁更新, 移动端 Flutter、KMM、Compose Multiplatform 跨平台技术持续发布更新,想全部掌握是不可能也是不理智的。还在要结合自己的工作业务环境、职业发展,综合考虑,切勿在基本功不扎实的情况下被新出炉的技术牵走,只想追赶时髦的新技术词汇,最后只落个三心二意、囫囵吞枣、走马观花。记住,万丈高楼平地起。跨平台应用复杂后对于原生知识的依赖是逐渐增加的,无论如何,程序员的基本功:数据结构与算法是永不过时的 ~