当前位置: 首页 > news >正文

认识 Flutter

一、Flutter是什么?

Flutter is Google’s UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a single codebase.

Flutter 是 Google 的 UI 工具包,用于从单个代码库构建漂亮的、本地编译的移动、web 和桌面应用程序。

Flutter 的几个特点:美观、快速、高效、开放。

  • 美观:使用 Flutter 内置美丽的 Material Design 和 Cupertino widget、丰富的 motion API、平滑而自然的滑动效果和平台感知,为用户带来全新体验。
  • 快速:(1)Flutter 的 UI 渲染性能很好。在生产环境下,Flutter 将代码编译成机器码执行,并充分利用 GPU 的图形加速能力,因此使用 Flutter 开发的移动应用即使在低配手机上也能实现每秒60帧的UI渲染速度;(2)Flutter引擎使用C++编写,包括高效的Skia2D渲染引擎,Dart运行时和文本渲染库。
  • 高效:HotReload(热重载);开发一套代码多端可以使用。
  • 开放:Flutter是开放的,它是一个完全开源的项目。

二、跨平台历史

任何一种技术的出现是为了解决之前技术的痛点。

跨平台解决方案一:webview

基于 JavaScript 和 WebView 的跨平台

  • 最早出现的跨平台框架是基于 JavaScript 和 WebView ,代表框架有 PhoneGap,ApacheCordova,Ionic 等等。
  • 主要是通过 HTML 来构建自己的界面,再将其显示在各个平台的 WebView 中。
  • 但是它默认是不能调用本地的一些服务的(比如相机、蓝牙等),所以需要通过 JavaScript 进行桥接调用 Native 的一些代码来完成某些功能。
  • 但是,它本身的体验、性能都并不理想,而且开发过程中的坑非常多。

跨平台解决方案二:React Native

备受欢迎的 ReactNative
在寻求最佳跨平台解决方案的过程中,无疑 ReactNative 是之前最优秀的一个。

  • ReactNative(简称RN)是 Facebook 于2015年4月开源的跨平台移动应用开发框架,是Facebook 早先开源的 JS 框架 React 在原生移动应用平台的衍生产物,目前支持iOS和安卓两大平台;
  • RN使用 JavaScript 语言,类似于 HTML 的 JSX,以及 CSS 来开发移动应用,因此熟悉 Web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。
  • 并且在保留基本宣染能力的基础上,用原生自带的UI组件实现核心的渲染引擎,从而保证了良好的渲染性能。
  • 但是,由于 RN 的本质是通过 JavaScriptVM 调用原生接口,通信相对比较低效,而且框架本身不负责宣染,而是是间接通过原生进行渲染的。

跨平台解决方案三:Flutter

从下面的图中可以对比出 flutter - native - rn 的区别。

  • Flutter 利用 Skia 绘图引擎,直接通过 CPU、GPU 进行绘制,不需要依赖任何原生的控件
  • Android 操作系统中,我们编写的原生控件实际上也是依赖于 Skia 进行绘制,所以 flutter 在某些 Android 操作系统上甚至还要高于原生(因为原生 Android 中的 Skia 必须随着操作系统进行更新,而 FlutterSDK 中总是保持最新的)
  • 而类似于 RN 的框架,必须通过某些桥接的方式先转成原生进行调用,之后再进行渲染。

  • 在 iOS 上,Flutter 同样不依赖原生控件进行渲染,而是使用自带的引擎(主要基于 Metal)直接绘制。 这带来了与 Android 上相同的好处:渲染一致性、不受系统版本制约、以及避免了桥接带来的性能损失。虽然苹果的原生渲染极其优秀,但 Flutter 通过这种方案实现了高度的跨平台一致性并具备了媲美原生的性能潜力。

在 iOS 上,Flutter 的渲染机制和性能优势逻辑与 Android 类似,甚至更显著。

  1. 绘图引擎

    • 在 iOS 上,Flutter 不再使用 Skia(默认情况下)。为了更好地与苹果生态系统集成并追求极致的性能,Flutter 使用了苹果自家的 Metal 作为底层图形 API(对于支持 Metal 的设备,基本上是 iPhone 5s 及以后的所有机型)。

    • Flutter 的引擎会将 UI 指令直接编译为 Metal 的命令,由 GPU 执行。对于旧设备,Flutter 会回退到 OpenGL ES。

    • 所以,准确的说法是:Flutter 在 iOS 上使用 Metal/OpenGL 进行绘制,同样不依赖原生控件。

  2. 与 iOS 原生的对比

    • 原生 iOS 应用:使用 UIKit 框架(如 UIButtonUILabelUITableView)。这些原生控件的绘制最终是由 Core Animation 和 Core Graphics 来完成的,它们底层也是调用 Metal/OpenGL,但这是一个非常优化和紧密集成的过程。

    • Flutter 应用:如前所述,用自己的渲染流水线,直接调用 Metal。

  3. 性能对比

    • 理论上:由于 Flutter 是直接调用 Metal,它避免了 UIKit 的抽象层,理论上可以做到和原生一样快,甚至在某些极端复杂的自定义 UI 绘制场景下更快,因为它避免了原生控件组合可能带来的一些开销。

    • 实际上:苹果对 UIKit 和 Core Animation 的优化已经到了登峰造极的地步,经过十多年的打磨,其性能在日常使用中极其流畅和稳定。Flutter 要达到与之媲美甚至超越,需要付出巨大的工程努力。

    • 更重要的优势:和 Android 的情况一样,Flutter 的渲染引擎是打包在 App 里的。这意味着:

      • 一致性:你的 App 在 iOS 12 和 iOS 16 上的外观、表现和性能是完全一致的。你不需要担心旧系统上的渲染 bug 或性能差异。

      • 不受系统限制:你可以立即使用 Flutter 引擎带来的最新图形特性,而无需等待用户升级到最新的 iOS 系统。


文章转载自:

http://uKlQXDrq.ngzkt.cn
http://QGEmKu6d.ngzkt.cn
http://lpaBs5dA.ngzkt.cn
http://1HWMzhbQ.ngzkt.cn
http://IkBh75b8.ngzkt.cn
http://6rp3D6Q6.ngzkt.cn
http://JIh0h8I5.ngzkt.cn
http://tuq7yd38.ngzkt.cn
http://e7mVRRoU.ngzkt.cn
http://n9DU45n7.ngzkt.cn
http://oHcnYhJj.ngzkt.cn
http://6IvAxP1o.ngzkt.cn
http://Yh7F4egZ.ngzkt.cn
http://4Cfa8t0k.ngzkt.cn
http://yIJ4wo3m.ngzkt.cn
http://RK8KcMxQ.ngzkt.cn
http://NBNuJbmc.ngzkt.cn
http://ZP1vV7E0.ngzkt.cn
http://Chb9kcdv.ngzkt.cn
http://Tj9GU4f6.ngzkt.cn
http://r5Z0WmY7.ngzkt.cn
http://y9vW0qar.ngzkt.cn
http://nbdhVXU9.ngzkt.cn
http://nMNoqExb.ngzkt.cn
http://Ky7ca3dh.ngzkt.cn
http://dGZfGjIu.ngzkt.cn
http://GWWvciV7.ngzkt.cn
http://V6XZNPz4.ngzkt.cn
http://4qsDiUl7.ngzkt.cn
http://MCsoc02A.ngzkt.cn
http://www.dtcms.com/a/368503.html

相关文章:

  • 基于单片机智能热水壶/养生壶设计
  • Android8 binder源码学习分析笔记(二)
  • 【51单片机8*8点阵显示箭头动画详细注释】2022-12-1
  • 笔记三 FreeRTOS中断
  • 【连载 2/9】大模型应用:(二)初识大模型(35页)【附全文阅读】
  • 为什么动态视频业务内容不可以被CDN静态缓存?
  • 【视频系统】技术汇编
  • 如何提升技术架构设计能力?
  • 【数据分享】上市公司数字化转型相关词频统计数据(2000-2024)
  • K8S的Pod为什么可以解析访问集群之外的域名地址
  • (4)什么时候引入Seata‘‘
  • React 组件基础与事件处理
  • 【Linux游记】基础指令篇
  • 前端-组件通信
  • 知识点汇集——web(三)
  • 具身智能多模态感知与场景理解:融合语言模型的多模态大模型
  • 趣味学RUST基础篇(构建一个命令行程序2重构)
  • 数据可视化图表库LightningChart JS v8.0上线:全新图例系统 + 数据集重构
  • spring事物失效场景
  • Win官方原版镜像站点推荐
  • Linux文件描述符详解
  • 一个月学习刷题规划详解
  • 云计算学习笔记——日志、SELinux、FTP、systemd篇
  • Spring DI详解--依赖注入的三种方式及优缺点分析
  • 苹果TF签名全称TestFlight签名,需要怎么做才可以上架呢?
  • 小团队如何高效完成 uni-app iOS 上架,从分工到工具组合的实战经验
  • 华为认证HCIA备考知识点 :IP路由基础(含配置案例)
  • AI测试:自动化测试框架、智能缺陷检测、A/B测试优化
  • 从零到上线:直播美颜SDK中人脸美型功能的技术实现与效果优化
  • 大数据毕业设计选题推荐-基于大数据的高级大豆农业数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData