Platformview在iOS与Android上的实现方式对比

news2024/12/26 10:58:08

        Android中早期版本Platformview的实现基于Virtual Display。VirtualDisplay方案的原理是,先将Native View绘制到虚显,然后Flutter通过从虚显输出中获取纹理并将其与自己内部的widget树进行合成,最后作为Flutter在 Android 上更大的纹理输出的一部分进行渲染。该方案除了存在性能问题外,更重要的是其作为虚拟显示屏, 只是解决了显示问题,对于事件输入,native组件无法直接接受到用户点击事件, 有很多难以解决的功能性问题,例如,事件/文本输入/可访问性。

        

        iOS中对Platformview的支持主要是一种被称作Hybrid Composition的方案。其基本原理是,UI渲染由Native驱动,在Native组件外层会包裹一层FlutterTouchInterceptingView , 用于接收处理点击事件, 然后添加到Flutterview上。 然后在native组件之上再增加一层FlutterOverlayView, 用来显示在其之上的Flutter组件以解决组件的遮挡问题该方案优点是可以完整捕获Platformview上的点击、滑动等事件,但由于每添加一个Platformview,额外会在其上新增一个全屏的FlutterOverlayView,会带来明显的额外内存消耗。此外,为了合成Flutter和Platformview的图层,Quartz还可能创建额外buffer空间。所以, 如果确信Platformview上不会有其他的Flutter图层,我们可以主动将FlutterOverlayView释放以节省内存。

       

        Flutter 3.0版本后,Android也开始支持与iOS类似的Hybird Composition方案,即TextureLayer方案。其原理是,Native侧创建一个 PlatformViewWrapper 对象,其负责拦截处理Nativeview的用户点击事件。 将NativeView渲染到FlutterView上,采用的是外接纹理方案。即在Native侧通过调用FlutterEnginge的接口创建一个Texture,生成一个 TextureId,并将其传递给Flutter侧;在Flutter 侧通过textureId将其包装成一个Texture Widget组件native组件的纹理被映射到Flutter侧的Texture组件上。具体做法是,重写PlatformViewWrapper的draw方法,通过surface.lockHardwareCanvas()获得canvas画板,然后 将native组件直接绘制到该画板上,换言之,上述过程将Native组件的canvas替换为TextureWidget的对应的canvas,进而实现Native组件在Flutter的显示。

        

        该方案与iOS方案非常接近,Native组件是真实存在于视图层级中的,并且由于渲染过程避免了数据在不同环境间传输和拷贝,理论上性能更好。区别是其不需要创建额外的overlayview,Platformview与Flutter多图层叠加的效果渲染是通过纹理的叠加实现的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【经验】f-string 的一些点

【经验】f-string 的一些点 省几个字别数错了对齐它现在几点 省几个字 让 f-string 给你写表达式,在 f-string 中使用 来自动打印表达式 a 10 b 25 print(f"{a b }") >>> a b 35别数错了 对于过大的数字难以一眼看出来它的数量级&#xf…

Access AR Foundation 5.1 in Unity 2022

如果已经下载安装了ARF但版本是5.0.7 可以通过下面的方式修改 修改后面的数字会自动更新 更新完成后查看版本 官方文档 Access AR Foundation 5.1 in Unity 2021 | AR Foundation | 5.1.2

93. 通用防重幂等设计

文章目录 一、防重与幂等的区别二、幂等性的应用场景三、幂等性与防重关系四、处理流程 一、防重与幂等的区别 防重与幂等是在 Web 应用程序和分布式系统中重要而又非常常见的问题。 防重 防重是指在多次提交同样的请求过程中,系统会检测和消除重复的数据&#xf…

网络安全: Kali Linux 使用 docker-compose 部署 openvas

目录 一、实验 1.环境 2.Kali Linux 安装docker与docker-compose 3.Kali Linux 使用docker-compose方式部署 openvas 4. KaliLinux 使用openvas 二、问题 1. 信息安全漏洞库 2.信息安全漏洞共享平台 3.Windows 更新指南与查询 4.CVE 查询 5.docker-compose 如何修改o…

适配Ollama的前端界面Open WebUI

在前文 本地大模型运行框架Ollama 中,老苏留了个尾巴,限于篇幅只是提了一下 Open WebUI,有网友留言说自己安装没搞定,今天我们来补上 文章传送门:本地大模型运行框架Ollama 什么是 Open WebUI ? Open WebUI…

深度学习_19_卷积

理论: 目前问题在于识别图片所需要的模型权重数量会比较大 一般图片像素在12M也就是一千两百万像素,要用模型对其整体识别的话,需要至少一千两百万权重,那也仅仅是线性模型,若用多层感知机的话,模型的数据…

【Flutter 面试题】在flutter里streams是什么?有几种streams?有什么场景用到它?

【Flutter 面试题】在flutter里streams是什么?有几种streams?有什么场景用到它? 文章目录 写在前面解答补充说明**Single subscription streams** 读取文件广播流 Broadcast streams 通知多个监听器关于状态的变化 写在前面 关于我 &#xf…

智慧城市的创新实践:全球案例分享

一、引言 在全球化和数字化的时代,智慧城市已经成为城市发展的前沿趋势。智慧城市运用先进的信息技术,如大数据、物联网、云计算和人工智能等,提升城市管理的智能化水平,增强公共服务效率,优化居民生活质量。本文将通…

python自动化管理和zabbix监控网络设备(zabbix部署监控网络设备以及验证部分)

目录 前言 一、Zabbix搭建 二、FW1 三、python脚本 四、core-sw1 五、core-sw2 六、DMZ-sw1 前言 详细配置视频解析访问:白帽小丑的个人空间-白帽小丑个人主页-哔哩哔哩视频 一、Zabbix搭建 sed -i s/SELINUXenforcing/SELINUXdisable/ /etc/selinux/config…

AWTK 开源串口屏开发(11) - 天气预报

# AWTK 开源串口屏开发 - 天气预报 天气预报是一个很常用的功能,在很多设备上都有这个功能。实现天气预报的功能,不能说很难但是也绝不简单,首先需要从网上获取数据,再解析数据,最后更新到界面上。 在 AWTK 串口屏中…

es集群的详细搭建过程

目录 一、VM配置二、集群搭建三、集群配置 一、VM配置 VM的安装 VMware Workstation 15 Pro的安装与破解 VM新建虚拟机 VM新建虚拟机 二、集群搭建 打开新建好的服务器,node1,使用xshell远程连接 下载es:https://www.elastic.co/cn/down…

HTML+CSS:未来属于CSS

效果演示 一个带有不同背景颜色的网格布局&#xff0c;其中一些元素可能会更大或者字体更大。 Code <main><div></div><div></div><div></div><div></div><div class"big"></div><div><…

IP-guard邮件管控再升级,记录屏幕画面,智能阻断泄密邮件

邮件是工作沟通以及文件传输的重要工具,却也成为了信息泄露的常见渠道。员工通过邮件对外发送了什么内容,是否含有敏感信息都无从得知,机密通过邮件渠道外泄也难以制止。想要防止企业的重要信息通过邮件方式泄露,我们不仅需要通过技术措施对外发邮件的行为进行规范,也要对…

基于 Vue3打造前台+中台通用提效解决方案(上)

基于 Vue3打造前台+中台通用提效解决方案 1、项目架构 本项目使用vite + vue3来实现前中台解决方案 2、为什么使用vite ? 因为,之前的项目一直都是使用webpack作为构建工具;vite出来这么久了,也没有用过;所以想在当前项目下进行使用; 2.1、为什么vite比webpack块? …

25.基于springboot + vue实现的前后端分离-停车管理系统(项目 + 论文)

项目介绍 系统包含用户和管理员两个角色 用户&#xff1a;登录、注册、个人中心、预定停车位、缴费信息 管理员&#xff1a;登录、用户信息管理、车位信息管理、车位费用管理、停泊车辆管理、车辆进出管理、登录日志查询 技术选型 开发工具&#xff1a;IDEA 服务器&#…

本科毕业设计:计及并网依赖性的分布式能源系统优化研究。(C语言实现)(内包含NSGA II优化算法)(一)

目录 前言 1、分布式能源系统模型介绍 2、运行策略 前言 本篇文章介绍的是我的毕业设计&#xff0c;我将C语言将其实现。 1、分布式能源系统模型介绍 这是我将研究的分布式能源系统的框架&#xff0c;内部供能装置包括&#xff1a;太阳能光伏板&#xff1b;sofc燃料电池、太阳…

Leetcode1642. 可以到达的最远建筑

Every day a Leetcode 题目来源&#xff1a;1642. 可以到达的最远建筑 解法1&#xff1a;反悔贪心 在移动的过程中&#xff0c;我们会需要若干次需要使用砖块或者梯子的情况。假设当前我们需要移动到下一建筑物&#xff0c;但必须使用 1 架梯子或者 Δh 个砖块&#xff0c;那…

docker 创建RedHat8.5镜像

确定要创建的小红帽版本&#xff0c;可以进入官网查看 https://hub.docker.com/search?qRedHat 复制命令到安装docker的机器上&#xff0c;拉取小红帽镜像。 docker pull redhat/ubi8:latest 执行完成后&#xff0c;查看镜像是否拉取成功 docker images |grep redhat 如图…

《Spring Security 简易速速上手小册》第3章 用户认证机制(2024 最新版)

文章目录 3.1 认证流程3.1.1 基础知识详解认证流程的核心概念认证流程的步骤 3.1.2 主要案例&#xff1a;内存用户认证案例 Demo&#xff1a;快速启动你的 Spring Boot 守护程序 3.1.3 拓展案例 1&#xff1a;数据库用户认证案例 Demo&#xff1a;让数据库守护你的秘密 3.1.4 拓…

vue3三级嵌套复选框(element-plus)

一、功能描述 当选择第一级的复选框时下面所有内容全选和取消全选&#xff0c;当选择第二的复选框时第三级的所有内容全选和取消全选。只要有一个第三级的内容没有选&#xff0c;二级和一级则不能勾上。第三级内容全选上了&#xff0c;第二级复选框就钩上。第二级也是同样的道理…