闲来无事,分享一下最近关于flutter的研究心得吧,系列文章将持续更新,欢迎拍砖。
flutter作为谷歌推出的一种跨平台技术,在github上的star数已经超过react-native,并且数目还在不断的快速增加中,其火爆程度由此可见一斑。
flutter的优秀之处在于其自己实现的一整套框架,在ui层面与原生系统完全解耦,使用优秀的dart语言进行编程,flutter官方封装了大量的炫酷的ui效果供开发者使用。这些优秀的特性是其他跨平台解决方案无法比拟的。
flutter为什么能够实现跨平台?其实,跨平台技术本身就存在,而且很多,比如二维游戏引擎cocos2dx,三维游戏引擎Unity3D,pc平台常用的QT,但,关于移动app开发的跨平台技术在flutter之前总显的不是那么完美,哪怕是facebook出的火爆的reactnative,其原理居然是通过与原生控件映射的方式,窃以为这种方式的耦合程度是非常可怕的。flutter实现android和ios的跨平台是通过skia库实现的,skia是google提供的2D向量图形处理函数库,这个库在很多google的产品中已经包含,比如android系统、chrome浏览器以及 还处于开发中的Fuchsia系统。所以,flutter可以直接调用android的skia库;但,在ios系统中是不存在这个库的,所以在打包ios安装包的时候将会同时在安装包中打包skia库。
flutter使用dart语言,dart同时支持 JIT 和 AOT,是纯面向对象的,比java还要面向对象,java中还有基本数据类型,但dart一切皆为对象;dart支持函数编程,其方法能够被引用传递,dart中的方法支持命名参数,位置参数;dart支持数据类型声明(var)推断,动态数据类型(dynamic);Dart的泛型类型是在运行时绑定的这一点要比java的泛型擦出要优秀的多;最新的dart语法支持扩展函数,这一点简直优秀的不要不要的;dart支持类似javascript的promise语法,这个特性让异步编程变得极为简洁,良好的解决了死亡回调问题。但是,dart不支持内部类,让代码的封装有些凌乱;dart移除了反射机制,让反序列框架很难出现;dart的语法糖跟kotlin比起来还是差距太大。
flutter官方提供了大量的widget,甚至提供了webviewwidget,platformwidget竭尽所能将不同平台解耦,flutter使用响应式编程的思想,当然也不是说完全不能使用类似android和ios那种dom操作的开发方式;如果你之前有使用过类似react,vue之类的框架将会很容易上手;flutter提供了大量的响应式编程api,比如Stream等;
flutter总体上是非常优秀的,但本人在开发中也遇到了非常多坑爹的坑;但大多化险为夷,如果你也觉得想来体验体验,那就一块来讨论讨论吧!
今天这一篇先水到此吧,今后将持续更新,分享flutter开发中的术细节。