Flutter 核心技术与实战
陈航
前美团点评高级技术专家
42432 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
Flutter 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

04 | Flutter区别于其他方案的关键技术是什么?

应用开发流程
Flutter的技术栈
Flutter的界面渲染过程
Flutter的架构图
Dart作为Flutter的开发语言
Dart的特点和优势
Skia对Flutter的重要性
Skia的特点和应用
Skia和Dart的关键作用
Flutter的组件渲染原理
Flutter与其他跨平台方案的本质区别
Flutter的出现及特点
跨平台开发方案的问题
原生开发 vs. 跨平台开发
学习Flutter需要掌握哪些知识?
Flutter的原理
为什么是Dart?
Skia是什么?
Flutter是怎么运转的?
Flutter出现的历史背景
Flutter区别于其他方案的关键技术是什么?

该思维导图由 AI 生成,仅供参考

你好,我是陈航。
Flutter 是什么?它出现的动机是什么,解决了哪些痛点?相比其他跨平台技术,Flutter 的优势在哪里?……相信很多人在第一眼看到 Flutter 时,都会有类似的疑问。
别急,在今天的这篇文章中,我会与你介绍 Flutter 的历史背景和运行机制,并以界面渲染过程为例与你讲述其实现原理,让你对 Flutter 能够有一个全方位的认知和感受。在对 Flutter 有了全面了解后,这些疑问自然也就迎刃而解了。
接下来,我们就从 Flutter 出现的历史背景开始谈起吧。

Flutter 出现的历史背景

为不同的操作系统开发拥有相同功能的应用程序,开发人员只有两个选择:
使用原生开发语言(即 Java 和 Objective-C),针对不同平台分别进行开发。
使用跨平台解决方案,对不同平台进行统一开发。
原生开发方式的体验最好,但研发效率和研发成本相对较高;而跨平台开发方式研发虽然效率高,但为了抹平多端平台差异,各类解决方案暴露的组件和 API 较原生开发相比少很多,因此研发体验和产品功能并不完美。
所以,最成功的跨平台开发方案其实是依托于浏览器控件的 Web。浏览器保证了 99% 的概率下 Web 的需求都是可以实现的,不需要业务将就“技术”。不过,Web 最大的问题在于它的性能和体验与原生开发存在肉眼可感知的差异,因此并不适用于对体验要求较高的场景。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Flutter是一种跨平台开发技术,利用Skia图像渲染引擎和Dart编程语言实现高保真、高性能的应用。相比其他跨平台技术,Flutter通过自己完成组件渲染的闭环,保证了视图渲染在Android和iOS上的高度一致性,并且在代码执行效率和渲染性能上可以媲美原生App的体验。Skia作为底层图像渲染引擎,为Flutter提供了跨平台渲染能力,最大限度地抹平平台差异,提高渲染效率与性能。而Dart语言则支持即时编译JIT和事前编译AOT,具有运行速度快、执行性能好的特点,同时也易于上手。Flutter的出现解决了跨平台开发方案的问题,为开发者和用户提供了良好的体验,因此受到越来越多的关注。 文章深入探讨了Flutter的架构和实现原理,从Embedder、Engine、Framework三层架构入手,详细介绍了Flutter的布局、绘制、合成和渲染四个阶段的工作原理。此外,文章还总结了学习Flutter所需的知识体系,为读者提供了清晰的学习路线。整体而言,本文通过深入浅出的方式,全面介绍了Flutter的技术特点和学习路径,为读者提供了全面的了解和学习指导。 总之,本文通过深入浅出的方式,全面介绍了Flutter的技术特点和学习路径,为读者提供了全面的了解和学习指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Flutter 核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(50)

  • 最新
  • 精选
  • Mkl
    我有个疑问, “以下图为例:节点 1 在绘制完自身后,会再绘制子节点 2 和 6,最后绘制子节点 5、3 和 4。” 这难道不是广度优先吗?深度优先不是先绘制1,然后2,3,5,4,6吗?

    作者回复: 确实是写错了,稍后我修改下。正确的绘制顺序是:节点1在绘制完自身后,会再绘制节点2,然后绘制它的子节点3、4和5,最后绘制节点6。

    2019-07-06
    47
  • 楚小奕
    『Skia 已然是 Android 官方的图像渲染引擎了,因此 Flutter Android SDK 无需内嵌 Skia...』 据我所知,Android上Flutter也自己打了一个skia,并不是用的OS的skia。

    作者回复: 感谢提醒,查了下engine源码,确实如此

    2019-07-23
    26
  • felix
    老师能不能谈谈flutter的局限,或是跨平台的局限 ,flutter也没能(或是还没有)很好解决的问题。

    作者回复: 跨平台的局限就是真正的多端一致性很难完全保证,RN这种就不说了,很多组件的表现行为两边都不一样。 就连Flutter也只能做到渲染层以上的多端一致性,还是有一些原生的东西(比如Push、地图、定位、蓝牙、WebView)绕不开,需要通过在原生上写插件来搞定。不过话说回来,如果真的绕开了,那Flutter就变成操作系统了,打出来的包没个几百兆估计是搞不定的

    2019-07-10
    11
  • jjlanbupt
    总感觉讲的还不是特别透彻,可能受限于篇幅原因吧,比如渲染的过程顺序这些相对于其他平台或者原生来说,为了避免重复绘制,到底做了哪些优化?深度优先遍历等应该是普遍的思想,另外希望老师多放一些相关知识点的链接,比如涉及到GPU的放一些讲解原理的优质文章链接,期待老师后面的讲解

    作者回复: 后面会专门讲Widget的绘制流程的。 Flutter's Rendering Pipeline可以参考:https://www.youtube.com/watch?v=UUfXWzp0-DU

    2019-07-06
    11
  • xyl
    webgl是基于opengl的,skia也是基于opengl的,这两者有什么区别呢?

    作者回复: webgl派生于opengl,是isa的关系; skia是基于opengl,是use的关系。

    2019-07-15
    8
  • 微笑美男😄
    深度优先 广度优先 不是很理解

    作者回复: 深度优先和广度优先是图/树结构中的概念:一层一层由上至下/由内而外遍历的方式,叫广度优先遍历;沿着一个节点方向深入探索,走到头再回退寻找其他方向的变量方式,叫做深度优先遍历。 如果对这两个概念不熟悉的话,可以看一下数据结构中图和树部分的内容

    2019-09-29
    2
    7
  • 巫山老妖
    跨平台(一套代码可以同时运行在iOS和Android平台) 高保真(一整套包括底层渲染逻辑和上层开发语言的完整解决方案) 高性能(代码执行效率和渲染性能媲美原生App的体验) 学习这个专栏最好不让自己陷阱细节,而是从整体去理解Flutter的核心技术,通过实战,比如做一些小Demo来体会新的开发模式,再逐步深入,这样会更加扎实。

    作者回复: 赞👍

    2019-09-27
    6
  • Geek_yy
    Skia 引擎加工成 GPU 数据, 为什么不直接提供给 GPU 渲染,而又opengl最终提供给gpu渲染

    作者回复: OpenGL是Skia的绘图引擎

    2019-07-06
    2
    4
  • 神经蛙
    合成那一部分不太理解。 “大量渲染内容的重复绘制”,这里的重复指的是什么,比如绘制Text('A')和Text('B')属于重复绘制吗? “根据图层大小、层级......将相同的图层归类合并”,什么情况下属于相同元素? 归类合并怎么理解?是像photoshop中的图层合并一样吗?

    作者回复: 1.比如两个Widget A和B,如果A已经完全能够把B遮盖住,B的图层就没必要绘制了。 2.归类合并可以按photoshop图层合并理解。

    2019-07-21
    2
  • Bojack
    从原理上来说flutter在两个原生端渲染应该是一致的,但是实际中发现还是有些区别的,比如下拉刷新这个组件,作者知道导致这个差异性的原因吗?

    作者回复: 为了尽可能模仿的比较像原生,ListView这个控件在Android和iOS上一些拖拽和滚动行为还是有差异的。依赖这些行为的下拉刷新组件也不例外

    2019-07-11
    2
收起评论
显示
设置
留言
50
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部