“就像你问我怎么才能造坦克,我就必须把从冶金到化工整个现代化工业体系给你讲一遍。”——tombkeeper编程
Flutter是什么?安全
Flutter是一款移动应用程序SDK,一份代码能够同时生成IOS和Android两个高性能、高保真的应用程序。数据结构
Flutter目标是使开发人员可以交付在不一样平台上都感受天然流畅的高性能应用程序。兼容滚动行为、排版、图标等方面的差别。并发
应用程序使用Dart语言编写的,若是使用过Java或JavaScript之类的语言,则该应用程序看起来会很熟悉。框架
为何要用Flutter?less
提升开发效率异步
建立美观,高度定制的用户体验ide
Flutter和React-Native、Weex这样的动态化框架有什么不一样?函数式编程
React-Native、Weex核心是经过Javascript开发,执行时须要Javascript解释器,UI是经过原生控件渲染。Flutter与用于构建移动应用程序的其它大多数框架不一样,由于Flutter既不使用WebView,也不使用操做系统的原生控件。 相反,Flutter使用本身的高性能渲染引擎来绘制widget。Flutter使用C、C ++、Dart和Skia(2D渲染引擎)构建。在IOS上,Flutter引擎的C/C ++代码使用LLVM编译,任何Dart代码都是AOT编译为本地代码的,Flutter应用程序使用本机指令集运行(不涉及解释器)。而在Android下,Flutter引擎的C/C ++代码是用Android的NDK编译的,任何Dart代码都是AOT编译成本地代码的,Flutter应用程序依然使用本机指令集运行(不涉及解释器)。所以,Flutter能达到原生应用同样的性能。函数
同时,Flutter提供了一组本身的widget),由Flutter的framework和引擎管理和渲染。您能够浏览Flutter widget的目录。之因此不适用原生控件,是由于Flutter但愿最终结果是更高质量的,若是Flutter使用原生系统widget,Flutter应用的质量和性能将受到这些widget自己质量的限制。例如,在Android中,有一组硬编码的手势和固定的规则来对它们进行手势冲突消歧。在Flutter中,您能够编写本身的手势识别器,该手势识别器是手势系统中的一级参与者 。此外,由不一样人撰写的两个小工具可协调手势冲突消歧。
Flutter在四个主要维度进行了评估,并考虑了框架做者、开发人员和最终用户的需求等因素。咱们发现不一样的语言在不一样的层面符合一部分需求,但Dart在全部评估维度上得分都很高,而且符合咱们的全部要求和标准。
Dart运行时和编译器支持Flutter的两个关键特性的组合:基于JIT的快速开发周期:容许使用类型的语言进行形状更改和有状态的热重载;以及AOT编译器,可生成高效的ARM代码,能够快速启动并拥有可预测的生产部署性能。
此外,咱们有机会与Dart社区密切合做,Dart社区正在积极投入资源改进Dart在Flutter中的使用。例如,当咱们采用Dart时,该语言没有提供生成原生二进制文件的工具链(这对于实现可预测的高性能是颇有帮助的),可是如今实现了,由于Dart团队为Flutter构建了它。一样,Dart VM以前已经针对吞吐量进行了优化,但团队如今正在优化VM的延迟时间,这对于Flutter的工做负载更为重要。
Dart在如下主要标准上获得高分:
Flutter是一个多范式编程环境。在Flutter中使用了过去几十年中开发的许多编程技术。咱们使用的每个范式都是咱们相信该它的优点特别适合Flutter:
组合:Flutter使用的主要范例是使用小对象,而后将它们组合在一块儿以得到更复杂的对象。Flutter widget库中的大多数widget都是以这种方式构建的。例如,Material FlatButton 类是使用MaterialButton 类构建, 该类自己使用IconTheme、InkWell、Padding、Center、Material、AnimatedDefaultTextStyle和ConstrainedBox组合 构建。该InkWell 使用内置GestureDetector。Material 是使用内置AnimatedDefaultTextStyle、NotificationListener和AnimatedPhysicalModel。等等,它们都是widget。
Flutter和别的开发之间的关系?
“
以前有很多朋友,在公众号里问我,是学习Flutter开发仍是学习安卓开发?这个问题在我看来其实并不完整,由于一样你还能够问是学习Flutter开发仍是iOS开发?是学习Flutter开发仍是学习Web开发?
经过此次Developer Keynote咱们能够看出,Flutter是一种跨平台技术,而不属于Android技术,Goole的Android团队对于Flutter只字未提,而是建议使用Kotlin语言来进行开发。那么Google为何还要开发Flutter技术呢?由于跨平台开发市场即便Google不作也会有其余公司去作,好比FaceBook的RN,阿里的Weex。所以Flutter其实是在和这些公司的产品抢市场,而不是在和本身的Android团队抢市场。
因此这种问题其实没有什么标准的答案,你喜欢哪一个技术就能够去学哪一个技术,Flutter和Adroid并非那种二选一的关系,而是一种共生的关系。Flutter团队会继续完善这个跨平台开发的框架,Android团队也会继续发展本身的原生开发环境,他们都有着各自的优点,相信将来都会变得更加美好。
”
——郭霖《一篇文章带你看遍Google I/O 2019大会》
Flutter中文网:https://flutterchina.club/technical-overview/
Flutter-FAQ:https://flutterchina.club/faq/