最近我偶然接触到了 Flutter 。Flutter 能让移动应用开发者真正做到编写一次代码,而在 iOS 、 Android 两个平台上运行,并且能获得不亚于原生应用的性能。今天的移动应用开发已经越来越注重效率了,所以个人感觉这种技术的前景还是很好的。下面就来说说开发了第一个应用之后的一点看法。
关于构建UI
hot reload
开发 flutter 应用时,可以使用 hot reload 。 hot reload 能让我们在不重新编译的前提下看到修改代码后的效果,不得不说这样子的效率是极高的。
控件
flutter 提供了很多种类的UI控件供开发者使用。基本上常见的UI控件都已经帮我们封装好了。如果我们的应用不包含一些很特殊的UI,那么构建起这些应用的UI是十分快的。另外, flutter 分别为 Android 和 iOS 提供了两个 UI 控件库,分别为 Material 和 cupertino ,这两个库可以让开发者做出和原生应用无异的 UI 效果,十分实用。
让人不爽的代码嵌套
由于 Flutter 应用提供的 UI 控件灵活性很大,widget(也就是UI控件)能做的事情很多,UI布局也是通过使用不同的widget完成的,所以在构建UI时会出现一大堆负责代码布局的widget层层嵌套,最后有一个widget负责展示数据的情况。
关于Dart语言
一点吐槽
开发 Flutter 应用使用的是 Dart 语言。dart 号称是支持函数式编程的,但是在实际使用的时候,我没有找到关于函数柯里化的相关语法,要手动写一层封装,不太爽。
关于应用性能
Flutter 使用的是 Skia 渲染引擎,Skia 渲染引擎是谷歌开发的使用 C++ 实现的一个渲染引擎,性能强劲。在实际开发中,的确感觉到对于小型应用,Flutter 应用的动画效果和原生应用的动画是没有区别的
代码组织方式
原生 iOS 应用的主流架构是 MVC 或者 MVVM,对于 Flutter 应用来说,选择就更加的多。除了 iOS 开发者熟悉的 MVC 和 MVVM,官方文档中还有展示了许多不同的架构,例如 BLoC、Redux等。部分代码组织方式借用了一些前端的思想。另外,你还可以使用最简单的 setState 。选择之多,让人眼花缭乱。在开始开发 Flutter 应用之前,选择一个合适自己的架构是很重要的。
多线程
Flutter 中对对 dart 语言中的 isolate 机制做了一个简单的封装,称之为 compute function。但是 compute function 目前还不支持运行异步方法。同时,dart 语言的自带 isolate 相关方法写起来比较麻烦,和iOS 中常用的 dispatch 方法的使用体验相差很远。
第三方库的使用
在 Flutter 中使用第三方库十分简单,只需要在配置文件中添加一行,在需要使用库的文件中引用一下。