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

鸿蒙Flutter实战:18-组合而非替换,现有插件快速鸿蒙化

引言

在对插件鸿蒙化时,除了往期文章现有Flutter项目支持鸿蒙II中讲到的使用 dependency_overrides 来配置鸿蒙适配库的两种方式以外,如果三方插件本身使用了联合插件的形式,也可以通过下面这种方式来添加鸿蒙平台的实现:

dependencies:image_picker: ^1.1.2image_picker_ohos:git:url: "https://gitcode.com/openharmony-sig/flutter_packages.git"path: "packages/image_picker/image_picker_ohos"

这也是一种非常优雅的方式,不用修改插件的代码,直接在项目配置中增加鸿蒙适配库即可。

什么是联合插件?

Federated plugins (联合插件) 是一种将对不同平台的支持分为单独的软件包。所以,联合插件能够使用针对 iOS、Android、Web 甚至是针对汽车 (例如在 IoT 设备上)分别使用对应的 package。除了这些好处之外,它还能够让领域专家在他们最了解的平台上扩展现有平台插件。

联合插件需要以下 package:

面向应用的 package

该 package 是用户使用插件的的直接依赖。它指定了 Flutter 应用使用的 API。

平台 package

一个或多个包含特定平台代码的 package。面向应用的 package 会调用这些平台 package—— 除非它们带有一些终端用户需要的特殊平台功能,否则它们不会包含在应用中。

平台接口 package

将面向应用的 package 与平台 package 进行整合的 package。该 package 会声明平台 package 需要实现的接口,供面向应用的 package 使用。使用单一的平台接口 package 可以确保所有平台 package 都按照各自的方法实现了统一要求的功能。

什么是未整合的联合插件?

相对的,整合的联合插件,也就是说插件在某个平台的实现,被整合进了主package,也就是"面向应用的 package"。如果插件已经整合了ohos实现,如 fluwx,则直接使用即可,无需再添加鸿蒙平台的实现。

如果插件没有整合ohos实现,如 image_picker, 则需要添加鸿蒙平台的实现。:

这种方式称作 “未整合的联合插件”, 在上面的配置中,
image_picker 是一个联合插件, 这里直接使用官方社区的最新版本,观察该插件的 pubspec.yaml 的文件,通过其结构可以发现联合插件的特点, 该插件的依赖项为:

dependencies:image_picker_platform_interface: ^2.10.0...image_picker_android: ^0.8.7image_picker_ios: ^0.8.8

image_picker_platform_interface 是一个抽象层,它定义了平台相关的接口,下面是各个平台的实现,通过拆分成包,以依赖的方式加载,那同样的原理,就可以再添加一条鸿蒙平台的实现包,就可以完成鸿蒙化适配, 也就是上面案例中的 image_picker_ohos

  image_picker_ohos:git:url: "https://gitcode.com/openharmony-sig/flutter_packages.git"path: "packages/image_picker/image_picker_ohos"

注意事项

需要注意,并非所有的插件都适合这种方式,有两种情况并不适合:

1.插件并非联合插件,也就是将所有平台的实现聚合在一个 package 中,这种建议使用 dependence_override 来覆写插件依赖

2.插件虽然是联合插件,但是鸿蒙化需要修改抽象层代码,典型的如用了 Platform.ohos 这种只有鸿蒙 Flutter SDK 才有的 API,这种也建议使用 dependence_override

相关文章:

鸿蒙Flutter实战:18-组合而非替换,现有插件快速鸿蒙化

引言 在对插件鸿蒙化时,除了往期文章现有Flutter项目支持鸿蒙II中讲到的使用 dependency_overrides 来配置鸿蒙适配库的两种方式以外,如果三方插件本身使用了联合插件的形式,也可以通过下面这种方式来添加鸿蒙平台的实现: depen…...

Qt之Service开发

一、概述 基于Qt的用于开发系统服务(守护进程)和后台服务,有以下几个优秀的开源 QtService 框架和库。 1. QtService (官方解决方案) GitHub: https://github.com/qtproject/qt-solutions/tree/master/qtservice 特点: 官方提供的服务框架 支持 Windows 服务和 Linux 守护…...

MFC添加免费版大漠3.1233

先创建一个MFC工程, 添加dm.dll 方法一:通过类向导-添加类-类型库中的MFC类-文件,选择dm.dll,如果没有"添加类型库中的MFC类"选项就用方法二添加 方法二:添加-新建项-MFC-Active或TypeLib-实现接口位置选…...

vue 图片放大到全局

背景: 在vue项目中,el-image组件图片组件用于展示图片,组件自带的属性preview-teleported,设置为true可以控制图片放大到全局 实现效果: 核心代码: //图片地址:BASEUrl /file/ item.file //这…...

人工智能入门(1)

人工智能导引 文章目录 人工智能导引artifiicial intelligence由图灵测试出发的六个领域贝叶斯方法分析成为大多数AI系统中不确定推理的现代方法基础 研究方法 机器学习计算机利用已经有的数据样本,得出某种规律模型,并利用模型预测未来的一种方法 回归算…...

Python爬虫:Feapder 的详细使用和案例

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. Feapder 概述1.1 Feapder介绍1.2 Feapder 核心特点1.3 Feapder 主要组件1.4 Feapder的安装2. 基础爬虫编写2.1 创建爬虫2.2 运行爬虫3. 数据采集案例3.1 新闻网站采集3.2 电商商品采集3.3 使用 Spider 类创建更强大爬…...

mybatis里in关键字拼接id问题

我们一般会把ids集合用StrUtil.join(‘,’)转成"1,2,3"这种形式 然后放入in中 我们会这么写: select id, nick_name, icon from tb_user where id in (#{ids}) order by FIELD(id, #{ids})结果发现sql执行是这样的: select id, nick_name, icon from tb_user where…...

在rockylinux9.4安装mongodb报错:缺少:libcrypto.so.10文件库

问题点: rockylinux9.4系统环境报错: ./mongod: error while loading shared libraries: libcrypto.so.10: cannot open shared object file: No such file or directory 解决方法: Ps:解压之后,检查mongodb的依赖环境…...

Spring Boot集成阿里云OSS:对象存储实战指南

Spring Boot集成阿里云OSS:对象存储实战指南 1. OSS是什么?为什么选择阿里云OSS? 对象存储(OSS) 是一种用于存储非结构化数据(如图片、视频、日志文件)的云服务,核心功能包括&#…...

【力扣hot100题】(019)旋转图像

比较考验脑子转不转得过来,最好先在纸上画一下图整理思路,不要和我一样上来就无脑套循环。 理解了思路还是好做的,每个小循环转一圈,大循环代表转的第几圈。小循环循环n-2i-1次,大循环循环(n1)…...

06_约束

文章目录 一、是什么二、实体完整性约束2.1、主键约束2.2、主键自增长2.3、唯一约束 三、域完整性约束3.1、非空约束3.2、默认值 四、引用完整性约束 一、是什么 用于限制加入表的数据的类型和规范,约束是添加在列上的,用来约束列的。 分类: …...

Anolis OS 8.4修复CVE-1999-0554漏洞记录

1. 使用TCP Wrappers配置白名单 通过修改/etc/hosts.allow和/etc/hosts.deny文件,仅允许特定IP访问NFS的mountd服务(需确保系统支持TCP Wrappers): 编辑/etc/hosts.allow,添加允许的客户端IP(如192.168.1…...

Seata AT模式的一些常见问题及其源码解析

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 Seata AT 基于两阶段提交协议的演变: 一阶段:业…...

华为GaussDB数据库的手动备份与还原操作介绍

数据库的备份以A机上的操作为例。 1、使用linux的root用户登录到GaussDB服务器。 2、用以下命令切换到 GaussDB 管理员用户,其中,omm 为当前数据库的linux账号。 su - omm 3、执行gs_dump命令进行数据库备份: 这里使用gs_dump命令进行备…...

2025年3月29日(matlab -ss -lti)

线性时不变系统(LTI系统)的定义与核心特性 线性时不变系统(Linear Time-Invariant System)是信号与系统分析中的基础模型,其核心特性包括线性和时不变性。以下从定义、验证方法和应用场景展开说明: 1. 线性…...

网络原理-TCP/IP

网络原理学习笔记:TCP/IP 核心概念 本文是我在学习网络原理时整理的笔记,主要涵盖传输层、网络层和数据链路层的核心协议和概念,特别是 TCP, UDP, IP, 和以太网。 一、传输层 (Transport Layer) 传输层负责提供端到端(进程到进…...

服务器磁盘卷组缓存cache设置介绍

工具1: storcli a. 确认软件包是否安装 [rootlocalhost ~]#rpm -qa | grep storcli storcli-1.21.06-1.noarch 备注:若检索结果为空,需要安装对应的软件安装包。安装命令如下: #rpm -ivh storcli-xx-xx-1.noarch.rpm b. 查看逻辑…...

Unity顶点优化:UV Splits与Smoothing Splits消除技巧

一、顶点分裂问题概述 1. 什么是顶点分裂 顶点分裂(Vertex Splits)是3D渲染中常见的性能问题,当模型需要为同一顶点位置存储不同属性值时,会创建多个顶点副本。主要分为两类: UV Splits:由UV不连续引起 Smoothing Splits&#…...

第五十三章 Spring之假如让你来写Boot——环境篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…...

Router [Continuation Settings]

楼上网络CMCC-Wmew,楼下接收不到,可能因为喜好弱,再弄一台路由器中转一下 Router [Continuation Settings] 路由器中续设置 到这里这台K3的路由器设置完成了,作为转发,中续,她还需要设置上游路由器&#…...

Zookeeper中的Zxid是如何设计的

想获取更多高质量的Java技术文章?欢迎访问Java技术小馆官网,持续更新优质内容,助力技术成长 Java技术小馆官网https://www.yuque.com/jtostring Zookeeper中的Zxid是如何设计的 如果你们之前学习过 ZooKeeper,你们可能已经了解…...

蓝桥云客 岛屿个数

0岛屿个数 - 蓝桥云课 问题描述 小蓝得到了一副大小为 MN 的格子地图,可以将其视作一个只包含字符 0(代表海水)和 1(代表陆地)的二维数组,地图之外可以视作全部是海水,每个岛屿由在上/下/左/右…...

深度学习篇---paddleocr正则化提取

文章目录 前言一、代码总述&介绍1.1导入必要的库1.1.1cv21.1.2re1.1.3paddleocr 1.2初始化PaddleOCR1.3打开摄像头1.4使用 PaddleOCR 进行识别1.5定义正则表达式模式1.6打印提取结果1.7异常处理 二、正则表达式2.1简介2.2常用正则表达式模式及原理2.2.1. 快递单号模式2.2.2…...

Android 蓝牙/Wi-Fi通信协议之:低功耗蓝牙(BLE 4.0+)介绍

介绍:蓝牙通信协议详解 1. 蓝牙协议分层 Android主要支持**经典蓝牙(Bluetooth Classic)和低功耗蓝牙(BLE)**两种模式: 经典蓝牙(BT 2.1/3.0) 低功耗蓝牙(BLE 4.0&…...

流影---开源网络流量分析平台(四)(分析引擎部署)

目录 功能介绍 部署过程 一、安装依赖环境 二、源码编译部署 三、运行环境配置 四、运行配置 功能介绍 本章我将继续安装流影的分析引擎组件首先,ly_analyser是流影的威胁行为分析引擎,读取netflow v9格式的数据作为输入,运行各种威胁行…...

31天Python入门——第14天:异常处理

你好,我是安然无虞。 文章目录 异常处理1. Python异常2. 异常捕获try-except语句捕获所有的异常信息获取异常对象finally块 3. raise语句4. 自定义异常5. 函数调用里面产生的异常补充练习 异常处理 1. Python异常 Python异常指的是在程序执行过程中发生的错误或异…...

浅析Android Jetpack ACC之LiveData

一、Android Jetpack简介 Android官网对Jetpack的介绍如下: Jetpack is a suite of libraries to help developers follow best practices, reduce boilerplate code, and write code that works consistently across Android versions and devices so that develo…...

【区块链安全 | 第十五篇】类型之值类型(二)

文章目录 值类型有理数和整数字面量(Rational and Integer Literals)字符串字面量和类型(String Literals and Types)Unicode 字面量(Unicode Literals)十六进制字面量(Hexadecimal Literals&am…...

深度学习篇---模型训练评估参数

文章目录 前言一、Precision(精确率)1.1定义1.2意义1.3数值接近11.4数值再0.5左右1.5数值接近0 二、Recall(召回率)2.1定义2.2意义2.3数值接近12.4数值在0.5左右2.5数值接近0 三、Accuracy(准确率)3.1定义3…...

SQL Server 可用性组自动种子设定失败问题

目录标题 SQL Server 可用性组自动种子设定失败问题笔记一、问题背景二、错误日志分析错误信息错误代码与分析 三、自动种子设定概述(同上,无需修改)四、解决步骤1. 备份主数据库2. 在辅助副本上恢复数据库3. 重新启动自动种子设定 SQL Serve…...