Flutter一路飙升,为何受欢迎?分享学习路程
前言
Flutter的人气飙升是有充分理由的。Flutter为开发人员提供了广泛的优势,可以加快开发速度,并带来更加用户友好的移动应用程序。
Flutter很容易上手,无论你是否有丰富的开发经验。经常使用其他语言(如Java,Python,C#或其他面向对象语言)的开发人员将毫无问题地将Flutter和Dart添加到他们的库中,因为Dart在结构和语法上都与这些语言相似。
此外,对于那些开发经验较少的人来说,Flutter的扩展小部件库使得构建应用程序变得容易,而无需编写大量代码;有几个平台使用Flutter来构建应用程序而无需编写任何代码!

Flutter有哪些优点
1、UI和业务逻辑适用于不同平台
基本上所有跨平台框架都提供了一种在目标平台之间共享代码库的方式,但是,Flutter是个例外,它允许共享UI代码和UI本身。
2、减少开发时间
根据我们的经验,构建一个普通的中型代码量Android应用也至少需要40秒才能交付到测试设备上;有时,调整布局中的较小外观可能需要花费很多时间。
3、加快产品上线速度
在大多数情况下,与单独为Android和iOS开发的同一个应用相比较,Flutter应用所需的开发工时至少要少两倍。
原因简单:你不必单独为特定的平台去编写代码,就可以获得所需的视觉效果;任何基于2D的UI都可以在Flutter中实现,同时无需与本机应用扯上关系。
4、媲美原生
Flutter直接对接到了底层的绘制引擎,而不像RN得需要先转化成原生系统提供的UI组件,所以理论上来说Flutter在性能方面应该是等同于原生的,但是由于系统通常会对原生应用有着诸多的优化,所以也只能含蓄的用“媲美”一词。
5、实现任何复杂、自定义动画UI
Flutter的最大优点之一是可以自定义屏幕上显示的任何内容,而不论它多么复杂。
尽管原生也可以实现自定义的UI,但对比起来所需的工作量投入是不同的。
6、独立渲染引擎
Flutter使用Skia来渲染到平台提供的canvas上,由于有了高性能引擎,Flutter内置的UI几乎可以在任何平台上启动。换句话说,不再需要调整UI即可将其迁移到目标平台上,极大地简化了开发过程。
7、针对平台的简单逻辑实现
除了UI外,许多当下移动应用非常依赖高级OS级别的功能,例如:获取GPS坐标、蓝牙通信、收集传感器数据、权限处理等,而其中许多功能在开发Flutter应用时是可以通过Google提供的即用型插件去打通的。
8、已不仅仅是移动端
最后,你不仅可以在移动设备上进行Flutter应用开发,而且也有Flutter for Web和Flutter Desktop Embeddings。
缺点:
那么对于以上优点除外当然还有缺点;缺点如下:
最大的问题其实是 Flutter 很不适合混合开发。
相较于 react-native ,在混合开发时因为最终渲染树都是在同一个领域内,所以能够较为简单地和原生平台接壤,而 Flutter 的 UI 本身就独立于原生渲染树,混合成本大大提高。
另外 Flutter 类似于轻量级的游戏引擎,所以它很吃内存,特别是在 iOS 上,混合开发会导致应用大小和内存使用的大幅度增加,我一直不提倡 Flutter 使用混合开发。
如何学习Flutter呢?
网上的学习方法也是很多,但是学习的路线对新手不是很友好;这里我推荐这本电子手册《混合Flutter 3.0手册》,需要可以点击获取免费方式。
学习路线如下:
- Dart语法:这是学习flutter必备语法基础
- flutter之UI:主要以ListView、GridView、Widget等。
- flutter之线程:async、awalt、事件队列、Future、Promise、Platform Runner等。
- flutter启动流程:dart虚拟机、skia引擎、应用启动等。
- framework框架:动画、渲染机制、通信机制等等。
- flutter性能监控:工具学习与优化等。
思维导图:

文末(网上吐槽)
至于吐槽最多的应该就是 Flutter 嵌套恶心,是的, Flutter 的嵌套看起来很低等,但是它为什么这这样设计?
其中一个原因是因为 Flutter 中你写的 Widget 并不是真正的控件 ,在 Flutter 的 dart framework 里, Flutter 的状态管理和渲染需要经历 Widget -> Element -> RenderObject -> Layer 等的变换过程 ,开发者编写的 Widget 代码,其实在 Flutter 中定位更像配置文件,而这些配置文件可以通过模版的方式来减少不必要的嵌套,其中官方的 Container 就是很好的例子。
所以不同场景应该选择不同框架,没有最好的,只有最合适的。