Flutter整体框架

       

        Flutter整体框架由三部分组成:Framework、Engine和Embedder。

       Framework

        Framework提供了一个用 Dart 语言编写的现代、反应式框架,由许多抽象的层级组成。它包括一套丰富的布局、动画、绘制、手势UI组件及配套代码,以及更基础的异步、文件、ui等基础服务。

        Framework最顶端是各种Widgets。包括我们经常用到的 Material 和 Cupertino两种风格的Widget以及下面的不带明确风格的Widgets。比如:UI/文本/图片/按钮等基础 Widgets。 在 Widget 层下面,你会发现 Rendering 层。

        再往下是RenderObject。其会被上层的Flutter Widgets调用来实现其布局和后台的绘制。Rendering tree 中的所有 RenderObjects 都会被Flutter分层和绘制。不过,大多数情况下, 你会发现 Flutter中我们想要实现自定义的绘制逻辑,主要是使用CustomPaint或RenderObject的子类RenderBox ,而不是直接使用RenderObject。因为封装一个全新的RenderObject是相当麻烦的,我们必须去实现layout、绘制和命中测试逻辑。

        dart:ui 是框架的最底层,它负责处理与 Engine 层的交流沟通,以及一些对Flutter开发的基础抽象。 此部分的核心代码是: flutter 仓库下的flutter package,以及 sky_engine 仓库下的 io, async, ui等package。

       Engine

        Engine大部分是用C++实现的,其提供了Flutter核心API的底层实现。包括 Dart 运行时、编译工具链,以及图形(通过Skia)、文本布局、文件和网络I/O、可访问性支持、插件架构等等,是连接框架和系统(Andoird/iOS)的桥梁。

        Engine通过dart:ui暴露给Flutter框架,它将底层的C++代码封装在Dart类中。这个库暴露了最底层的基元,例如用于驱动输入、图形和文本渲染子系统的类。

        Dart 部分主要包括:Dart Runtime,Garbage Collection(GC)以及Debug模式下的JIT支持。

        Skia是开源的二维图形库,提供了适用于多种软硬件平台的通用API。

        Text 即文本渲染,其使用Skia作为渲染后端,在Android和Fuchsia上使用FreeType渲染,在iOS上使用CoreGraphics来渲染字体。

       Embedder

        Embedder 负责与底层操作系统协调,以访问服务,如渲染表面、可访问性和输入,并管理线程及消息事件循环。

        Embedder提供初始化 Flutter 引擎的入口,使Flutter 代码可以作为一个模块集成到现有的应用程序中,或者作为应用的主要模块。

        Embedder会获取 UI 和栅格化线程,创建 Flutter 可以写入的纹理。

        Embedder层同时负责管理应用的生命周期,包括输入的操作(例如鼠标、键盘和触控)、窗口大小的变化、线程管理和平台消息的传递等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/429532.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

参数引入和全局变量引入实现-目标和

LCR 102. 目标和 - 力扣(LeetCode) 分析题意,画出决策树,其他的思路都跟前面讲过的类似: 全局变量引入实现: 全局变量的引入,需要手动处理回溯; class Solution {int ret; //…

视频拉流推流技术梳理

概况 视频的整个流程主要分为推流和拉流 摄像头场景: 摄像头捕捉视频画面,推流到服务器,服务器分发到CDN, 客户端从CDN地址拉流,客户端进行播放 直播场景: 主播通过手机,电脑等客户端&…

前端爬虫+可视化Demo

爬虫简介 可以把互联网比做成一张 “大网”,爬虫就是在这张大网上不断爬取信息的程序。 爬虫是请求网站并提取数据的自动化程序。 省流:Demo实现前置知识: JS 基础Node 基础 (1)爬虫基本工作流程: 向…

RK3568平台 USB基础知识

一.现实工作中USB实际例子 现象:把USB设备比如Android手机接到PC 右下角弹出"发现android phone"跳出一个对话框,提示你安装驱动程序 问1:USB设备插到电脑上去,接触到的对方设备是什么? 答1:…

yum 和 rpm

rpm说明 rpm -qa :列出所有已安装的软件包 [roothub ~] rpm -qa geoipupdate-2.5.0-1.el7.x86_64 ncurses-base-5.9-14.20130511.el7_4.noarch libndp-1.2-9.el7.x86_64 libfastjson-0.99.4-3.el7.x86_64 。。。 rpm -qf FILENAME :查找提供 FILENAME…

SwiftUI之CoreData详解(一)

coreData 是一种数据持久化的方案,是对SQLite的一种封装。一说到这种桌面化的数据库,我就无比的怀念Foxbase|Foxpro, 多好的数据库产品,被微软扼杀了,相当年教大学生妹子们国家二级数据库时都是手把手教的,呃~~~&#…

wordpress模板官网

移民wordpress主题 移民代办wordpress主题,适合做海外移民咨询的代理公司搭建wordpress企业官方网站使用。 https://www.jianzhanpress.com/?p5130 夏令营wordpress主题 绿色夏令营wordpress主题,适合做夏令营或户外拓展的公司搭建wordpress官方网站…

【动态规划】第十一届蓝桥杯省赛第二场C++ C组《数字三角形》(c++)

1.题目描述 上图给出了一个数字三角形。 从三角形的顶部到底部有很多条不同的路径。 对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右边的那个数。 …

绝地求生:小团团曝被判8年:地图语音包或将下架,公会和主播被一锅端

这两天大家都在讨论某鱼平台办卡抽奖的事情。这件事发生之后没多久,某鱼平台里面的大量主播在同一时间停播,闲游盒认为大家应该也懂的,这次停播就是因为这些主播也参与了办卡抽奖,都需要接受调查,在两个月左右的调查中…

【项目实践】如何发掘用户隐性需求推送PUSH

1.背景 对比业界广告推荐、触达成熟的平台,例如抖音,小红书,淘宝,知乎等,都已经站在巨量数据的基础之上,具备了 “用户意图分析” 的能力,可以分析出 “用户的隐性需求”,假设我们同…

Python学习日记(一:List、Tuple、dictionary)

前言: 最近想拓展一下自己的知识面,特来学习一下python这门语言,因为之前学习过C语言,目前学习起来Python还不是特别费劲,也由此感叹C语言不愧是最基础的语言。不多废话,进入正题 概述: Pytho…

典中典之西电A测-气压测控仿真系统

兄弟,如果你看到这篇,只能说明你A测也挂了,没办法,哥们太菜了,抄的太假过不了你电有些老师的慧眼 这坨🐕⑩我先吃为敬 环境搭建可以参考这个兄弟的博客 一、题目要求 实现功能:使用 Arduino UNO 微控制器,搭建一个 PC 上位机远程气压检测控…

动态规划:LeetCode第10题 正则表达式匹配

题目: 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 示例 1: …

C语言文件操作,linux文件操作,文件描述符,linux下一切皆文件,缓冲区,重定向

目录 C语言文件操作 如何打开文件以及打开文件方式 读写文件 关闭文件 Linux系统下的文件操作 open 宏标志位 write,read,close,lseek接口 什么是当前路径? linux下一切皆文件 文件描述符 文件描述符排序 C语言文件操…

【Linux从青铜到王者】进程信号

——————————————————————————————————————————— 信号入门 在了解信号之前有许多要理解的相关概念 我们可以先通过一个生活例子来初步认识一下信号 1.生活角度的信号 你在网上买了很多件商品,再等待不同商品快递的到来…

达梦、金仓、南大、瀚高、优炫:从社区建设看企业技术自信心

正文约950字,预计阅读时间2分钟 国产技术厂商在面对自身产品问题时,往往保持回避态度,不愿公之于众,主要原因有2方面: 1,产品技术层面问题较多,如某些根本性缺陷难以攻克,或问题发…

Python爬虫实战(基础篇)—13获取《人民网》【最新】【国内】【国际】写入Word(附完整代码)

文章目录 专栏导读背景测试代码分析请求网址请求参数代码测试数据分析利用lxml+xpath进一步分析将获取链接再获取文章内容测试代码写入word完整代码总结专栏导读 🔥🔥本文已收录于《Python基础篇爬虫》 🉑🉑本专栏专门针对于有爬虫基础准备的一套基础教学,轻松掌握Py…

vue 安装各种问题

新下载了个项目模板,安装包就遇到了各种各样问题 电脑:mac 使用npm i 等命令一直安装项目,然后一直报错 2534 info run canvas2.11.2 install node_modules/canvas node-pre-gyp install --fallback-to-build --update-binary 2535 info r…

Tomcat+Nginx的动静分离

1.反向代理多机 实验:Nginx要开启upstream(负载均衡)、location(url链接)、proxy_pass(反向代理) 配置:7-3做代理服务器;7-1 和 7-2做Tomcat服务器 关闭防火墙和selinux 1.准备配置 7-3安装nginx;7-1 和 7-2安装Tomcat&#xff…

Re61:读论文 PRP Get an A in Math: Progressive Rectification Prompting

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称:Get an A in Math: Progressive Rectification Prompting ArXiv网址:https://arxiv.org/abs/2312.06867 官方实现网站:PRP 官方代码:https://github.…