google谷歌云盘
在过去的几个月中,我有机会研究和练习Flutter的功能。 我读了很多关于它的文章,还弄脏了我的手,并使用Flutter构建了几个小型应用程序。 在本文中,我想通过一系列问题和答案来一窥Flutter的含义,希望您已经想到了至少其中一些问题,我可以回答。
1.什么是Flutter?
Flutter是一个开源的跨平台移动应用程序开发框架,正如Google所定义的那样,“允许您从单个代码库在iOS和Android上构建漂亮的本机应用程序 ”。 首个Alpha版本于2017年5月发布; 1.5年后,Flutter于2018年12月4日获得了第一个稳定的1.0版本。
除了支持Android和iOS平台之外,Flutter还将是为即将推出的Google操作系统Fuchsia开发应用程序的主要框架。 它目前正在开发中,并将有可能逐步取代Android。
2.什么是Dart? 又为什么呢
Dart是用于开发Flutter应用程序的面向对象的垃圾收集编程语言。 它也是由Google创建的,但是是开源的,因此它在Google内部和外部都有社区。
除了Google起源之外,Dart还被选作Flutter的语言,其原因如下:它是极少数可以同时编译AOT(提前)和JIT(即时)的语言之一。
- JIT编译用于应用程序开发过程中,因为它可以通过在运行时即时编译代码来实现热重载(我将在下一个问题中讨论更多内容)和快速的开发周期。
- 完成开发并准备发布时,将使用AOT编译 。 然后将代码AOT编译为本地代码,从而实现应用的快速启动和高效执行。
就个人而言,我对Dart的经验是,如果您是已经熟悉Java或类似语言的开发人员,那么只需几天就可以习惯它。 因此,例如,如果您是Android开发人员,那么该语言的学习曲线对您来说应该非常低。
凭借其简洁但灵活的语法,Dart可以被识别为仅包含任何高级编程语言中最需要的功能的语言。
3. Flutter是如何原生的?

Flutter使用称为Skia的图形引擎在应用程序端执行所有UI渲染。 这意味着它不依赖于平台提供的OEM小部件。 它只需要平台的画布来绘制自己的渲染图。 这样可以确保可预测性以及开发人员对小部件和布局的完全控制。

除此之外,Flutter将其结构保留为小部件树。 顺便说一句, Flutter中的几乎所有内容都是一个小部件 ,它使您可以在小部件内的小部件结构中构建应用程序。 这种内部树结构允许Skia仅呈现需要更新的小部件,并从缓存中检索未更改甚至移动的小部件。
4.与React Native有什么不同?

React Native利用JavaScript桥将其小部件转换为OEM小部件。 而且由于它会不断进行转换(比较和更新周期),因此会造成瓶颈并导致性能下降。
相反,尽管仍然使用React式视图的优点,但Flutter并未使用这种桥将自己的小部件转换为OEM小部件,如上一个问题的答案所示。 除了快速流畅的UI性能和可预测性之外,这是它的另一个优点,在Android KitKat设备上看到的内容与在Android Pie上看到的内容相同。 这种兼容性是显而易见的,因为Flutter不使用OEM小部件,并且不受不同Android版本之间UI / UX更改的影响。
5.没有布局预览…这是问题吗?

根本不!Flutter具有一项称为“热重载”的功能 ,使您可以在应用程序运行时热交换代码更改。 在屏幕上看到更改所花费的时间不到一秒钟。 它肯定是快速的,但也很聪明,因为它可以在热重载之间保留应用程序的运行时状态。 结果,您将获得比布局预览更好,更有用的功能。
6.什么是Flutter小部件?

Flutter应用程序被视为小部件的树 。 在上面给出的小部件树中,您看到的每个节点都是一个小部件。 即使要将小部件放在屏幕上居中 ,也要用Center包裹小部件,而Center本身也是小部件。 因此,您可以通过组合较小的窗口小部件以创建更复杂的窗口小部件(甚至页面,甚至页面层次结构)来构建整个UI。 在面向对象的编程中,这称为“继承之上的组成”原理。 相反,例如在Android开发中,您可以通过扩展类的View类型来创建自定义视图。
Flutter中有两种类型的小部件:
- StatelessWidget —不可变,表示其属性无法更改,应该是最终的。
- StatefulWidget-维护状态,该状态在小部件的生存期内可能会改变。 要更改StatefulWidget的状态,应调用setState() 。 然后重新绘制小部件。
7.两个平台都支持各种小部件?
Flutter提供的小部件集非常广泛,尤其是对于Material组件 。 根据我的动手经验,与Android开发相比,在Flutter中使用复杂的组件(例如抽屉,底部导航栏或标签栏)要容易得多。 在Flutter的窗口小部件中徘徊时,您会遇到非常有趣的窗口小部件,例如UserAccountsDrawerHeader 。 是的,即使这是Flutter提供的即用型UI组件。
对于Cupertino(iOS风格)小部件 ,我不能说同样的广泛性适用于它们。 它们足够覆盖大多数iOS小部件,但不如Material组件那么详细。 当您认为Flutter是Google产品时,这实际上并不奇怪。 但是,我不能说这是一个严重的问题,因为小部件集是如此可定制的,您可以通过使用小部件的参数并将它们中的几乎任何一个放置在其他部件中来获得所需的外观。
8.应用商店中是否有Flutter应用?
根据2018年12月Flutter Live活动期间分享的最新数据,Google Play商店中有3,000多个Flutter应用程序 ,拥有超过2亿用户 。
以下视频是关于阿里巴巴拥有5000万用户的咸鱼应用程序的 ,该应用程序使用Flutter来实现一些页面,这些页面在UI中特别需要高性能:
如果您正在寻找Flutter的更完整的应用程序,请观看以下视频,该视频与百老汇音乐剧Hamilton的Android和iOS应用程序(使用Flutter开发)有关:
9.那么……为什么要扑扑?
我个人认为,获得Flutter的经验非常有价值。 在某个时候绝对是值得的,尤其是在紫红色开始出现时。 我认为它不会变成Google会抛弃的某种垃圾框架。 但是,让我们更加客观一些,列出所有使Flutter成为您下一个移动应用程序开发框架时值得考虑的要点:
- 现代化的API-旨在解决当今应用程序开发领域的常见需求并可以自定义
- 执行自己的渲染(使用Skia)并使用其自己的小部件 -导致UI的可预测性,这意味着所有版本的Android和iOS共享同一UI
- UI以60 fps的速度运行 -优于任何其他跨平台框架
- 将AOT编译为本机代码 -快速,顺畅的应用启动和执行
- Android和iOS中的代码重用率很高(大多数情况下高于90%)
- Flutter应用程序的完整编译需要大约25秒才能完成,而该项目大约需要2分钟才能在Android系统中构建
- 借助热重载功能, 增量编译耗时不到一秒钟
- 2倍的资源带宽 –一个团队可以在一个代码库上工作,而不是Android和iOS上的单独团队
- 开源并得到Google的支持
10. Flutter是否仅限于移动世界?
不,不是!虽然不是官方支持的Google产品,但您可以使用Flutter构建桌面应用。 要了解如何实现这一目标,您可以看一下以下GitHub存储库: Flutter的桌面嵌入

此外,在去年12月(2018年4月4日)举行的Flutter Live活动中,宣布Flutter将具有正式支持的版本或Web开发的补充框架,称为“蜂鸟”。
如果您对如何使用所有这些不同的环境支持感到困惑,那么简单的答案就是Flutter并不太依赖平台的资源以及平台的功能。 它只需要平台提供的画布即可使用其自身的功能来完成所有UI的创建和渲染。 这就是使Flutter如此强大和便携的原因。
这就是本文的全部内容……我希望我可以初步了解Flutter是什么以及它有什么功能。 如果您已经是移动应用程序开发人员,或者想要进入这个领域但正在寻找跨平台的解决方案,我强烈建议您动手,并开始构建小型应用程序以自行尝试Flutter。 您绝对不会后悔。
资源:
- 扑官方网站
- 为什么Flutter使用Dart ,Wm Leler撰写
- Wm Leler撰写的Flutter的革命性著作
- 颤抖 -Paulina Szklarska的文章, 您可能会喜欢它的5个原因
- 什么东西!! 理解Flutter作为Android开发人员 ,Harshit Dwivedi的文章
- 为什么选择Flutter,以及它如何使我们的公司变得更好 ,马修·史密斯(Matthew Smith)撰写
- 向公司或客户宣传Flutter ,Wm Leler撰写
- 颤振魔术,蒂姆·梅塞施密特(Tim Messerschmidt)演示
- 宣布Flutter 1.0(Flutter Live,主题演讲第1部分) ,Google Developers的视频
翻译自: https://hackernoon.com/googles-flutter-in-10-questions-answers-928e142ec725
google谷歌云盘