一、前言
如今的移动端跨平台解决方案百家争鸣,像早些年的RN,近些年的uni-app、flutter等。每一门技术都有各自的优点与不足,本文旨在介绍Flutter的优点以及通过Flutter与Native的优缺点对比来协助开发者在新项目立项时选择技术方案
二、Flutter的优点
1.Flutter 克服了传统跨平台的限制
长期以来,创建真正的跨平台方法一直是技术顾问的苦恼所在,他们厌倦了为同一产品制作多个版本。但是,实际上,跨平台应用的用户体验通常落后于原生 app,因为你经常需要即时编译 JavaScript 来构建 UI 体验
使用 Flutter,你不仅可以拥有“一次编写”的优势,还可以创建高性能的“原生”体验,因为 Flutter 应用程序是提前编译出机器可执行的二进制文件。它克服了其他跨平台方法中的一些常见问题
2. 开发人员的生产力提高了十倍
这种生产力的提高来自 Flutter 的“热重载”(也就是所谓的“有状态的热重载”和“热重启”)。这样,开发人员可以在不到一秒的时间内看到他们对应用程序状态所做的更改;并且在不到 10s 的时间内改变 app 的结构。
没有必要去启动另一个 Gradle 构建程序——因为你可以在保存后查看你的修改。对于开发人员来说,这通常很容易掌握——在使用“热重载”时几乎没有等待时间,因为在默认情况下,每次保存时都会实时改变。
然而,优势是至关重要的。使用 Flutter 开发时间通常会减少 30-40%,因为在 Android 开发中,每次修改后 Gradle 都需要重新构建,这会降低 Android 开发人员的速度。
3. 前后端只需一套代码
在 Android 编程中,前端( Views )有单独的文件,由后端( Java )引用,与之不同的是,flutter 使用一种语言( Dart )来完成这两项工作,并使用一个响应式框架。
Dart 借鉴了其他语言众多流行的特性,同时不会让你感到陌生,因为它和 Java 或者其他语言相似。Dart 的构建考虑了开发人员的易用性,从而使许多常见任务变得更加容易
4. 这是一种强大的开箱即用的设计体验
由于 Flutter 团队对 Material design 规范的积极适配,使得开发者很容易就可以创建出功能强大的 UI 体验。它可以帮助你生成通常只能在原生 app 中才能体验到的平滑、流畅,因为 Flutter 的发行版构建的就是一个原生 app 。
Flutter 的小部件同时也实现了 iOS 的人机界面设计规范,可以让你在 iPhone 和 iPad 上也能获得那种原生的“体验”。
5. 有一个数量众多且开源的软件库
大量可用的开源包可以帮助你更快、更轻松地创建应用程序,而且目前有许多可用的包可以使许多复杂的任务变得更容易。
由于不断加入的开发人员对 Flutter 的作出的积极贡献,所以即使这个开源库还不够成熟,但它依然在积极壮大。
6.大量 IDE支持 Flutter
在使用 Flutter 进行编程时,你可以从许多集成开发环境中进行选择。一开始我使用的是 Android Studio,但后来我看 Flutter Live 时使用的是VS Code。这让我很疑惑,因为我发现很多 Flutter 开发人员都在使用 Visual Studio Code。当我尝试之后,我明白为什么这么多人喜欢它了。 VS Code 相较于 Android Studio 和 IntelliJ 更加轻量,速度也快得多,并且具有两者中的大部分特性。就我个人而言,我已经转向 VS Code,但是你也可以使用许多其他的 IDE ,你无需切换就可以开始 Flutter 的工作。
7.UI遵从性——一切都是一个小部件
在 flutter 中,所有的东西都是一个小部件,例如 Appbar, Drawer, Snackbar, Scaffold 等等。开发者可以很容易地将一个小部件包装在另一个小部件中以实现一些效果,例如将一个部件包装在一个 Center 小部件中,就可以让其居中。
8.Android/iOS 的不同主题
根据用户的平台分配正确的主题就像使用三元 if 检查用户正在运行的平台一样简单;允许 UI 在运行时决定使用哪些 UI 组件。
二、不同场景方案选择对比
场景 | Flutter | Native |
---|---|---|
Android、iOS同一套UI | 😀 | 😟 |
产品与系统底层强交互 | 😟 | 😀 |
包体积大小 | 😐 | 😀 |
性能 | 😀 | 😀 |
用户体验 | 😀 | 😀 |
三方库生态环境 | 😐 | 😀 |
开发周期 | 😀 | 😐 |
开发者数量/专业程度 | 😐 | 😀 |
三、结语
使用 Flutter 的价值很明显,也很有吸引力,因为它减轻了初创公司试图将产品发布到多个平台所面临的许多困难;特别是处理在有限的时间和预算内将软件产品推向市场的时候。缺点也是存在的,比如有些功能实现不了呀、生态环境
有所欠佳啊之类的。所以怎么选择技术方案还是要看具体需求来决定。但是对于我们开发者而言,肯定是要积极主动的去学习新技术,拥抱变化以致于不被时间淘汰。
本文中Flutter的优点来源于文章 https://github.com/xitu/gold-miner/blob/master/TODO1/13-reasons-why-you-should-choose-consider-to-move-to-flutter-in-2019.md