flutter 创建插件

资料:

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 中声明文件

objectivec 复制代码
FOUNDATION_EXPORT BOOL Konnect_im_sdkInitSDK(id<Konnect_im_sdk_callbackOnConnListener> _Nullable listener, NSString* _Nullable operationID, NSString* _Nullable config);
objectivec 复制代码
@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 第一个参数是这样写的

Swift 复制代码
 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 中是不存在多继承的 下面的写法 又报多继承

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

是 传参类型不对导致的

安卓项目

修改 build.gradle 配置文件

dependencies {

// libs 是 第三方包的路径

implementation fileTree(dir: 'libs', include: ['*.jar'])

// imsdk

implementation(name: 'konnect_im_sdk', ext: 'aar')

}
文件中导入第三方包

package chat.konnect.konnect_im_sdk;

相关推荐
晚霞的不甘20 分钟前
实战深研:构建高可靠、低延迟的 Flutter + OpenHarmony 智慧教育互动平台(支持离线教学、多端协同与国产化适配)
前端·javascript·flutter
kirk_wang30 分钟前
Flutter视频播放器在鸿蒙系统(HarmonyOS)上的适配实践
flutter·移动开发·跨平台·arkts·鸿蒙
子春一35 分钟前
Flutter 与 Web3 融合开发实战:在去中心化应用(DApp)中集成钱包、智能合约与链上交互
flutter·web3·去中心化
晚霞的不甘36 分钟前
实战精研:构建高安全、多模态的 Flutter + OpenHarmony 智慧医疗健康应用(符合 HIPAA 与医疗器械软件规范)
javascript·安全·flutter
小a彤38 分钟前
Flutter 与原生开发深度对比及实践指南
flutter
5008443 分钟前
鸿蒙 Flutter 插件二次开发:基于开源插件(如 flutter_downloader)适配鸿蒙【实战指南】
flutter·华为·electron·开源·音视频·开源鸿蒙
5008444 分钟前
鸿蒙 Flutter 混合栈开发:与 React Native/ArkTS 页面无缝集成(2025 爆火方案)
flutter·华为·electron·wpf·开源鸿蒙
tangweiguo0305198710 小时前
Dart 面试核心考点全解析
flutter
SoaringHeart12 小时前
Flutter组件封装:验证码倒计时按钮 TimerButton
前端·flutter