全面理解 Flutter(万字长文,深度解析

最后,我们再简单总结一下有哪些问题:

1、Web 性能差,跟原生 App 存在肉眼可见的差距;

2、React Native 跟 Web 相比,支持的能力非常有限,特定长场景问题,需要三端团队一个一个处理;

3、Web 浏览器的安卓碎片化严重(感谢 X5,腾讯的同学过得相对轻松一些)。

为了解决上面的问题,Flutter 出现了:

一套代码可以运行在两端;自绘 UI,脱离平台,也可以简单的把它理解为一个浏览器的子集。

铺垫了这么多,就是为了帮助您回忆起技术发展的脉络和技术趋势,可以更好的理解下面即将要表达的文稿,下面我们正式开始介绍 Flutter。

2)Flutter 实现原理

Flutter 能介绍的技术点其实非常多,这里找了一些具有代表性的技术项,结合自己的理解跟大家分享一下。包括设计思路、渲染方式、UI 的生命周期。因为这几个点,跟 React 技术栈风格非常相似,以这种思考结构去对比介绍,可以帮助大家更好的理解这项技术本身。

Flutter 整体架构设计

19956127-09291d341def1443.jpg

Google 了一下关键词,搜素得到了这张图片,从下向上进行一些描述:

Embedder:是操作系统适配层,实现了渲染 Surface 设置,线程设置,以及平台插件等平台相关特性的适配。从这里我们可以看到,Flutter 平台相关特性并不多,这就使得从框架层面保持跨端一致性的成本相对较低。

Flutter Engine:这是一个纯 C++实现的 SDK,其中囊括了 Skia 引擎、Dart 运行时、文字排版引擎等。不过说白了,它就是 Dart 的一个运行时,它可以以 JIT、JITSnapshot 或者 AOT 的模式运行 Dart 代码。在代码调用 dart:ui 库时,提供 dart:ui 库中 Native Binding 实现。 不过别忘了,这个运行时还控制着 VSync 信号的传递、GPU 数据的填充等,并且还负责把客户端的事件传递到运行时中的代码。具体的绘制方式,我们放在后面描述。

Flutter Framework:这是一个纯 Dart 实现的 SDK,类似于 React 在 JavaScript 中的作用。它实现了一套基础库, 用于处理动画、绘图和手势。并且基于绘图封装了一套 UI 组件库,然后根据 Material 和 Cupertino 两种视觉风格区分开来。这个纯 Dart 实现的 SDK 被封装为了一个叫作 dart:ui 的 Dart 库。我们在使用 Flutter 写 App 的时候,直接导入这个库即可使用组件等功能。

PS:虽然很早知道 Flutter,但实际写 Flutter 时间也比较短暂。引擎源码层面,目前也没有深入的涉猎。了解的方式可以通过自己阅读源码,或者找谷歌、阿里、美团、以及我司的开发者帮忙。从技术角度来了解这些,在需要的阶段,不会成为大家的瓶颈。毕竟商业世界充满了壁垒,而应用层面的技术本身是开放的。

3)Flutter 应用层语言 Dart

简单描述一下 JIT 与 AOT

  • JIT

在运行时即时编译,在开发周期中使用,可以动态下发和执行代码,开发测试效率高,但运行速度和执行性能则会因为运行时即时编译受到影响。

  • AOT

即提前编译,可以生成被直接执行的二进制代码,运行速度快、执行性能表现好,但每次执行前都需要提前编译,开发测试效率低。

Dart 是什么

它的目标在于成为下一代结构化 Web 开发语言。Dart 发布于 2011 年 10 月 Google 的"GOTO 国际软件开发大会"。是一种基于类编程语言(class-based programminglanguage),在所有浏览器都能够有高性能的运行效率。Chrome 浏览器内置了 DartVM,可以直接高效的运行 dart 代码(2015 年被移出)。支持 Dart 代码转成 Javascript,直接在 Javascript引擎上运行。dart2js

Dart 的特点

  • 开发时 JIT,提升

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flutter是一种跨平台的移动应用开发框架,它使用Dart语言编写,并提供了丰富的布局控件来帮助开发者构建灵活和美观的用户界面。下面是对Flutter布局的一些理解: 1. 布局控件:Flutter提供了多种布局控件,包括容器(Container)、行(Row)、列(Column)、层叠(Stack)等等。这些控件可以嵌套使用,通过设置不同的属性和约束条件来实现各种复杂的布局效果。 2. 弹性布局:Flutter中的弹性布局使用Flexible和Expanded控件来实现。Flexible控件可以根据可用空间进行伸缩,而Expanded控件则会占据剩余的可用空间。 3. 相对布局:Flutter中的相对布局使用Positioned控件来实现。通过设置相对于父容器的位置和大小,可以精确地定位子控件。 4. 约束布局:Flutter中的约束布局使用ConstrainedBox和AspectRatio控件来实现。ConstrainedBox可以设置子控件的最小和最大尺寸,而AspectRatio可以设置子控件的宽高比。 5. 响应式布局:Flutter中的响应式布局使用MediaQuery和LayoutBuilder控件来实现。MediaQuery可以获取屏幕的尺寸和方向等信息,而LayoutBuilder可以根据父容器的尺寸来调整子控件的布局。 6. 自定义布局:除了内置的布局控件,Flutter还允许开发者自定义布局控件。通过继承RenderObjectWidget类并实现performLayout方法,开发者可以创建自己的布局控件。 总的来说,Flutter提供了丰富而灵活的布局控件,可以满足各种复杂的布局需求。开发者可以根据具体的场景和需求选择合适的布局方式来构建用户界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值