flutter 创建插件

news2024/11/19 5:36:46

资料:

flutter与原生通信的方式简介 - 简书

完整流程 Flutter 集成 Golang 多语言跨端开发基础案例 - 知乎

https://www.cnblogs.com/webabcd/p/flutter_lib_plugin_plugin_ios.html

步骤1、创建插件

我创建的插件名字是konnect_im_sdk 选择的语言是 java和swift创建。

直接把插件放在项目中 plugins/konnect_im_sdk  如下

然后再项目的pubspec.yaml 引入本地项目插件

konnect_im_sdk:

        path: plugins/konnect_im_sdk

然后再插件的ios项目目录下 创建 Products 将 完整流程 Flutter 集成 Golang 多语言跨端开发基础案例 - 知乎

生成的object-c的ios第三方sdk放进去

然后在  .podspec 文件配置 第三方sdk的路径

s.vendored_frameworks = 'Products/*.framework'

s.static_framework = true

Classes 下的文件中 导入 第三方库 如这样的

现在就可以调用object-c中的方法了

object-c 中声明文件

FOUNDATION_EXPORT BOOL Konnect_im_sdkInitSDK(id<Konnect_im_sdk_callbackOnConnListener> _Nullable listener, NSString* _Nullable operationID, NSString* _Nullable config);
@protocol Konnect_im_sdk_callbackOnConnListener;
@class Konnect_im_sdk_callbackOnConnListener;

@protocol Konnect_im_sdk_callbackOnBatchMsgListener <NSObject>
- (void)onRecvNewMessages:(NSString* _Nullable)messageList;
@end

@protocol Konnect_im_sdk_callbackOnConnListener <NSObject>
- (void)onConnectFailed:(int32_t)errCode errMsg:(NSString* _Nullable)errMsg;
- (void)onConnectSuccess;
- (void)onConnecting;
- (void)onKickedOffline;
- (void)onUserTokenExpired;
@end

@interface Konnect_im_sdk_callbackOnConnListener : NSObject <goSeqRefInterface, Konnect_im_sdk_callbackOnConnListener> {
}
@property(strong, readonly) _Nonnull id _ref;

- (nonnull instancetype)initWithRef:(_Nonnull id)ref;
- (void)onConnectFailed:(int32_t)errCode errMsg:(NSString* _Nullable)errMsg;
- (void)onConnectSuccess;
- (void)onConnecting;
- (void)onKickedOffline;
- (void)onUserTokenExpired;
@end

调用

Konnect_im_sdkInitSDK 第一个参数是这样写的

 class MyConnectionListener:  Konnect_im_sdk_callbackOnConnListener {
    override func onConnectFailed(_ errCode: Int32, errMsg: String?) {
        print("连接失败,错误码:\(errCode),错误信息:\(errMsg ?? "")")
    }
    
    override func onConnectSuccess() {
        print("连接成功")
    }
    
    override func onConnecting() {
        print("正在连接...")
    }
    
    override func onKickedOffline() {
        print("您已被踢下线")
    }
    
    override func onUserTokenExpired() {
        print("用户令牌已过期")
    }
}

运行可以运行 但是报错了 报错同  go_seq_go_to_refnum on objective-c objects is not permitted

https://github.com/golang/go/issues/20254

记 IOS Swift 实现 gomobile interface 抛出异常 go_seq_go_to_refnum on objective-c objects is not permitted

swift 中是不存在多继承的 下面的写法 又报多继承 

 class MyConnectionListener: NSObject, Konnect_im_sdk_callbackOnConnListener {
     func onConnectFailed(_ errCode: Int32, errMsg: String?) {
        print("连接失败,错误码:\(errCode),错误信息:\(errMsg ?? "")")
    }
    
     func onConnectSuccess() {
        print("连接成功")
    }
    
     func onConnecting() {
        print("正在连接...")
    }
    
     func onKickedOffline() {
        print("您已被踢下线")
    }
    
     func onUserTokenExpired() {
        print("用户令牌已过期")
    }
}

那么 Konnect_im_sdk_callbackOnConnListener是一个类 不是协议 说明声明文件中Konnect_im_sdk_callbackOnConnListener定义有问题 

找到第三方sdk定义的地方 注释掉

Konnect_im_sdk_callbackOnConnListener 不是既是协议 又同时定义为类

注释掉问题解决

总结 

go_seq_go_to_refnum on objective-c objects is not permitted

是 传参类型不对导致的 

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

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

相关文章

怎么多号发圈和批量加好友?

你知道怎么多号发圈和批量加好友吗&#xff1f; 我们都知道&#xff0c;微信号多&#xff0c;管理起来是一件相当麻烦的事。 那发圈和加好友&#xff0c;多号的话&#xff0c;那是相当大的工作量&#xff0c;那有没有什么办法可以多号同时进行发圈和加人吗&#xff1f; 当然有的…

【Java实战】Mybatis plus根据数据库表自动生成代码

首先生成一个maven项目&#xff0c;不会生成的参考 【Java实战】创建第一个Springboot项目Hello worldhttps://blog.csdn.net/forgetmiss/article/details/133889733 &#xff08;写的过程中遇到过的问题&#xff1a;mybatis-plus 生成controller中的代码&#xff0c; Reques…

Bootstrap-- 内容

Bootstrap4 - 中文文档 - 内容 处理不同尺寸下的图片的处理&#xff0c;避免资源浪费&#xff01;&#xff01;&#xff01;

liunx下软链接和硬链接的用法

什么是软链接&#xff08;类似快捷方式&#xff09;&#xff1a; 符号连接&#xff08;Symbolic Link&#xff09;&#xff0c;也叫软连接。 软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中&#xff0c;文件实际上是一个文本文件&#xff0c…

怎么压缩证件照到200k以下?教你在线压缩图片指定kb

新一年的国考报名开始了&#xff0c;相信许多小伙伴还在发愁报名信息资料上传的问题&#xff0c;比如提交证件照时会要求具体的图片kb大小&#xff0c;本文就来教大家怎么快速图片压缩指定大小&#xff08;https://www.yasuotu.com/imagesize&#xff09;&#xff0c;而且还不需…

GitKraken for Mac:强大且跨平台的Git客户端

如果你正在寻找一个强大、直观且跨平台的Git客户端&#xff0c;那么GitKraken绝对值得你考虑。在本文中&#xff0c;我们将详细介绍GitKraken的各项功能和优势&#xff0c;以帮助你了解它如何帮助你更有效地管理和提交代码。 GitKraken是一款真正的跨平台工具&#xff0c;可以在…

2024年关于湖北省建筑安全员B证报考你需要了解

2024年关于湖北省建筑安全员B证报考你需要了解 建筑安全员B证指的是建设厅三类人员建安B证&#xff0c;很多人对于B证报考不是很了解&#xff0c;对于安全员B报考条件、报考流程、报考时间、报考地区等事项叙后尘告诉你们。 湖北建筑安全员B证报考条件-建安B证 1.你的二级建造师…

(2022|ECCV,文本图像视频,3D 邻域注意,3D 稀疏注意)NÜWA:神经视觉世界创建的视觉合成预训练

NWA: Visual Synthesis Pre-training for Neural visUalWorld creAtion 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 相关工作 2.1. 视觉自回归模型 2.2. 视觉…

HugeGraph1.0.0部署,吐槽一下Hubble的数据导入 Bug

背景 HugeGraph 安装部署了最新版本1.0.0&#xff0c;发现它的 Web 工具 Hubble 有一个大 Bug。数据导入的时候&#xff0c;配置节点属性映射这个选项时&#xff0c;下拉框只有一个选项&#xff0c;但实际上&#xff0c;元数据配置中的属性有3个&#xff0c;这个 Bug 是怎么产…

Python开发之二维数组空缺值的近邻填充

Python开发之二维数组空缺值的填充 1 实现一&#xff0c;任意位置填充2 实现二&#xff0c;填充内部3 实现三&#xff0c;只填充边缘&#xff0c;不包括四个角 前言&#xff1a;主要实现二维数据里面某一个数据的缺失&#xff0c;用缺失的近邻数据进行均值填充&#xff0c;可以…

oracle 错题汇总

在Oracle数据库中&#xff0c;如果你在GROUP BY子句中指定了列&#xff0c;那么SELECT子句中除了聚合函数外的每个列都必须在GROUP BY子句中列出。 1.查询出每个部门的编号、名称、位置、部门人数、平均工资。 SELECT d.deptno AS "部门编号", d.dname AS &…

Jmeter(四):请求默认值元件应用,正则表达式提取器元件讲解

Jmeter请求默认值元件应用 HTTP请求默认值 在公司内部进行测试的时候&#xff0c;一般测试环境访问的接口地址&#xff08;服务器名称 或IP&#xff09;、端口、协议一般都是不变的&#xff0c;但http请求取样器每个请求都要求写一遍 这些信息&#xff0c;在实际HTTP请求取样…

数据驱动娱乐的未来:揭秘爱奇艺如何利用Apache Spark实现个性化推荐和内容分析

Apache Spark 在爱奇艺的现状与应用 Apache Spark 是爱奇艺大数据平台的核心组件&#xff0c;被广泛应用于数据处理、数据同步和数据查询分析等关键场景。在数据处理方面&#xff0c;爱奇艺通过数据开发平台支持开发者提交 Spark Jar 包任务或 Spark SQL 任务&#xff0c;进行…

预防电压波动带来的灾难:瞬态电压抑制器的作用和原理 | 百能云芯

在当今数字化时代&#xff0c;电子设备的应用已经无处不在&#xff0c;从个人电脑到智能手机&#xff0c;再到工业自动化系统和通信设备&#xff0c;这些设备的正常运行对于我们的生活和工作至关重要。然而&#xff0c;电子设备常常会受到来自电力系统的电压波动和瞬态电压的威…

Win+L不能锁屏

1、运行WINR&#xff0c;输入REGEDIT&#xff0c;运行注册表&#xff1a; 2、CTRLF&#xff0c;输入查找DisableLockWorkstation 3、双击这个&#xff0c;点十进制&#xff0c;输入0点确认即可。

复制粘贴(一):copy paste 事件

页面内容如下&#xff1a; <body><div id"container1"><p>阳光<input type"button" value"按钮" /><span>hello</span></p></div> </body>选择所有内容&#xff1a; user-select 按钮左…

低代码如何赋能实体经济走向数实融合

数字工厂、智慧园区、智慧社区、数字乡村、智慧校园、数字化管理平台……当前&#xff0c;各行各业正在全面拥抱数字化。“数实融合”的浪潮持续高涨&#xff0c;企业数字化转型的呼声也不断走高。然而&#xff0c;当前实体经济和数字经济融合不全&#xff0c;数字技术未能深度…

你可以永远相信铁死亡,4+机器学习+分型+实验的干湿结合机制

今天给同学们分享一篇铁死亡机器学习分型实验的生信文章“Identification of Ferroptosis-Related Biomarkers for Diagnosis and Molecular Classification of Staphylococcus aureus-Induced Osteomyelitis”&#xff0c;这篇文章于2023年4月26日发表在J Inflamm Res期刊上&a…

webpack快速入门

目录 1.概述 1.1.什么是webpack 1.2.loader 2.项目搭建 3.打包js&#xff1a; 4.打包CSS 5.打包图片 6.插件 1.概述 1.1.什么是webpack webpack是一个打包工具&#xff0c;其作用是对整个项目中的js、image、css进行打包。 传统的前端项目引用的第三方js或者css的时候…

DTI综述(更新中)

Deep Learning for drug repurposing&#xff1a;methods&#xff0c;datasets&#xff0c;and applications 综述读完&#xff0c;觉得少了点东西&#xff0c;自己写个DTI综述 Databases(包括但不限于文章中的) DATABASEDESCRIBEBindingDB有详细的drug信息和对应的target&a…