用pigeon kotlin swift写一个自己的插件

文章目录

        • 1. 创建一个flutter plugin项目
        • 2. 引入依赖
        • 3. 创建pigeons文件夹和message.dart
        • 4. 执行生成各个平台文件的命令
        • 5. base_plugin.dart
        • 6. BasePlugin.kt
        • 7. BasePlugin.swift
        • 8. 遇到的问题
        • 9. [源码](https://github.com/githubityu/base_plugin)

1. 创建一个flutter plugin项目
2. 引入依赖

pigeon: ^18.0.0

3. 创建pigeons文件夹和message.dart
import 'package:pigeon/pigeon.dart';// 输出配置
// 控制台执行:dart  run pigeon --input pigeons/message.dart
(PigeonOptions(dartOut: './lib/messages.g.dart',dartPackageName: 'base_plugin',kotlinOut: 'android/src/main/kotlin/com/app/base_plugin/Messages.g.kt',kotlinOptions: KotlinOptions(// copyrightHeader: ['zero'],package: 'com.app.base_plugin',),swiftOut: 'ios/Classes/Messages.g.swift',swiftOptions: SwiftOptions(),
))
()
abstract class HostMessageApi {String flutter2Native(String message, int type);String flutter2NativeAsync(String message, int type);
}()
abstract class FlutterMessageApi {String native2Flutter(String message, int type);String native2FlutterAsync(String message, int type);
}
4. 执行生成各个平台文件的命令

dart run pigeon --input pigeons/message.dart

5. base_plugin.dart
import 'messages.g.dart';class BasePlugin {static final HostMessageApi _api = HostMessageApi();static Future<String>  flutter2Native(String message, int type) async {return await _api.flutter2Native(message, type);}static Future<String>  flutter2NativeAsync(String message, int type) async {return await _api.flutter2NativeAsync(message, type);}
}
6. BasePlugin.kt
package com.app.base_pluginimport androidx.annotation.NonNull
import com.app.base_plugin.FlutterMessageApi
import com.app.base_plugin.HostMessageApi
import io.flutter.embedding.engine.plugins.FlutterPlugin/** BasePlugin */
class BasePlugin: FlutterPlugin, HostMessageApi {/// The MethodChannel that will the communication between Flutter and native Android////// This local reference serves to register the plugin with the Flutter Engine and unregister it/// when the Flutter Engine is detached from the Activityprivate lateinit var flutterMessageApi: FlutterMessageApioverride fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {print("onAttachedToEngine")HostMessageApi.setUp(flutterPluginBinding.binaryMessenger, this)flutterMessageApi = FlutterMessageApi(flutterPluginBinding.binaryMessenger)}override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {HostMessageApi.setUp(binding.binaryMessenger, null)}override fun flutter2Native(message: String, type: Long): String {print("flutter2Native=message=$message=type=$type")flutterMessageApi.native2Flutter("111", callback = {print("1111")}, typeArg = 1)return message}override fun flutter2NativeAsync(message: String,type: Long,callback: (Result<String>) -> Unit) {fun  d(e:Result<String>){print("d")}print("flutter2NativeAsync=message=$message=type=$type")flutterMessageApi.native2FlutterAsync("2222", callback = {print("222")}, typeArg = 2)callback(Result.success("flutter2NativeAsync=message=$message=type=$type"));}
}
7. BasePlugin.swift
import Flutter
import UIKitpublic class BasePlugin: NSObject, FlutterPlugin,HostMessageApi {private static var flutterAPI: FlutterMessageApi? = nilpublic static func register(with registrar: any FlutterPluginRegistrar) {let api = BasePlugin()HostMessageApiSetup.setUp(binaryMessenger: registrar.messenger(), api: api)flutterAPI = FlutterMessageApi(binaryMessenger: registrar.messenger())}func flutter2Native(message: String, type: Int64) throws -> String {print("ios->flutter2NativeMessage===="+message);return "ios->flutter2Native=message=\(message)=type=\(type)"}func flutter2NativeAsync(message: String, type: Int64, completion: @escaping (Result<String, any Error>) -> Void) {print("ios->flutter2NativeAsyncMessage===2")completion(.success(message))}}
8. 遇到的问题

Parse Issue (Xcode): Module ‘base_plugin’ not found

  1. 删除ios文件下面的podfile和podfile.lock
  2. Messages.g.swift 和BasePlugin.swift 要放到Classes下面

Pigeon: error: type ‘FlutterError’ does not conform to protocol ‘Error’

  1. 在Messages.g.swift中添加extension FlutterError: Swift.Error {}
9. 源码

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

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

相关文章

算法一:数字 - 两数之和

给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素不能使用两遍。 来源&#xff1a;力扣(LeetCode) 链接&#xf…

scala---基础核心知识(变量定义,数据类型,流程控制,方法定义,函数定义)

一、什么是scala Scala 是一种多范式的编程语言&#xff0c;其设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台&#xff08;Java虚拟机&#xff09;&#xff0c;并兼容现有的Java程序。 二、为什么要学习scala 1、优雅 2、速度快 3、能融合到hado…

管道流设计模式结合业务

文章目录 流程图代码实现pomcontextEventContextBizTypeAbstractEventContext filterEventFilterAbstractEventFilterEventFilterChainFilterChainPipelineDefaultEventFilterChain selectorFilterSelectorDefaultFilterSelector 调用代码PipelineApplicationcontrollerentitys…

浅析binance新币OMNI的前世今生

大盘跌跌不休&#xff0c;近期唯一的指望就是binance即将上线的OMNI 。虽然目前查到的空投数量不及预期&#xff0c;但OMNI能首发币安&#xff0c;确实远超预期了。 OMNI代币总量1亿&#xff0c;初始流通仅10,391,492枚&#xff0c;其中币安Lanchpool可挖350万枚 对于OMNI这个…

设计模式——模版模式21

模板方法模式在超类中定义了一个事务流程的框架&#xff0c; 允许子类在不修改结构的情况下重写其中一个或者多个特定步骤。下面以ggbond的校招礼盒发放为例。 设计模式&#xff0c;一定要敲代码理解 模版抽象 /*** author ggbond* date 2024年04月18日 17:32* 发送奖品*/ p…

50.HarmonyOS鸿蒙系统 App(ArkUI)web组件实现简易浏览器

50.HarmonyOS鸿蒙系统 App(ArkUI)web组件实现简易浏览器 配置网络访问权限&#xff1a; 跳转任务&#xff1a; Button(转到).onClick(() > {try {// 点击按钮时&#xff0c;通过loadUrl&#xff0c;跳转到www.example1.comthis.webviewController.loadUrl(this.get_url);} …

代码随想录第39天|62.不同路径 63. 不同路径 II

62.不同路径 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 动态规划中如何初始化很重要&#xff01;| LeetCode&#xff1a;62.不同路径_哔哩哔哩_bilibili 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标…

Codeforces Round 782 (Div. 2) D. Reverse Sort Sum

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e9, maxm 4e4 5; co…

Rust常见陷阱 | 线程间传递消息导致主线程无法结束

在多线程编程中,线程之间的通信是一个不可或缺的话题。尤其是在Rust语言中,由于其特有的所有权机制,线程通信需要更加仔细地处理。本文将深入讨论使用Rust标准库中的消息通道时如何避免主线程被阻塞的问题,并提供详尽的代码示例来辅助理解。 问题描述 当我们在Rust中使用…

【WP】猿人学4 雪碧图、样式干扰

https://match.yuanrenxue.cn/match/4 探索 首先打开Fiddler&#xff0c;发现每个包的除了page参数一样&#xff0c;然后重放攻击可以实现&#xff0c;尝试py复现 Python可以正常拿到数据&#xff0c;这题不考请求&#xff0c;这题的难点原来在于数据的加密&#xff0c;这些数字…

用10个Kimichat提示词5分钟创建一门在线课程

●研究市场并在生成式AI主题内找到一个特定细分市场&#xff0c;这一市场尚未被现有课程充分覆盖。使用在线研究来收集关于当前可用课程类型的信息&#xff0c;以及市场上存在哪些空白。利用这些信息创建一个填补空白并吸引对“生成式AI”感兴趣的特定受众群体的课程。确定课程…

面试经典算法系列之二叉树17 -- 验证二叉树

面试经典算法32 - 验证二叉树 LeetCode.98 公众号&#xff1a;阿Q技术站 问题描述 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当…

云解析DNS是什么?

说起云解析&#xff0c;相信很多用户都比较陌生&#xff0c;对于刚刚接触互联网的小白并不了解什么是云解析DNS&#xff0c;下面为您详解一下以上问题。 云解析DNS是什么 云解析 DNS(Domain Name System&#xff0c;简称 DNS) 一种安全、快速、稳定、可靠的权威 DNS 解析管理…

ActiveMQ 如果数据处理出现异常会怎么样

我们有一个 Spring 的客户端&#xff0c;在处理消息的时候因为程序的原因出现消息处理异常。 对这种情况&#xff0c;ActiveMQ 会把出现异常的消息放在 DLQ 队列中进行持久化。 因此&#xff0c;在 ActiveMQ 消息处理队列中需要持续关注 DLQ 队列&#xff0c; DLQ 的队列都是无…

生成人工智能体:人类行为的交互式模拟论文与源码架构解析(5)——可控评估端到端评估

最后完结篇,文末有测试中发现的有趣现象,并附上了相关资料链接~ 5.可控评估 分两个阶段评估生成代理。我们从一个更加严格控制的评估开始,单独评估代理的响应,以了解它们是否在狭义上定义的上下文中产生可信的行为。然后,在我们对代理社区进行为期两天的端到端分析中,我…

蓝桥杯2024年第十五届省赛真题-数字接龙

思路&#xff1a;DFS&#xff0c;因为输入的i&#xff0c;j的顺序导致&#xff0c;方向向量中x是行编号&#xff0c;y是列编号。方向向量可能和直觉上不同。 错的 //int dx[8]{0,1,1,1,0,-1,-1,-1}; //int dy[8]{1,1,0,-1,-1,-1,0,1}; 对的 int dx[]{-1,-1,0,1,1,1,0,-1}; int…

笔记:编写函数f(n),实现输人n的值,求出n的阶乘,然后调用此函数计算1!+2!+ 3!+...10!的结果,输出到屏幕上。

文章目录 前言一、n的阶乘是什么&#xff1f;二、编写代码1.代码2.优化代码 总结 前言 题目&#xff1a;编写函数f(n),实现输人n的值&#xff0c;求出n的阶乘&#xff0c;然后调用此函数计算1&#xff01;2! 3!…10!的结果&#xff0c;输出到屏幕上。 在编写函数 f(n) 前&…

Oracle昨日复习以及注意事项(与MYSQL不同的点)

一、SQL语句复习 1、创建表空间 表空间&#xff0c;指定存储文件的位置&#xff0c; 再去创建用户 &#xff0c;再指定表空间 创建表 数据库 &#x1f447; 表空间 创建表空间 create table space 表空间名字 datafile 路径&#xff08;保存数据路径&#xff09; size 100m a…

数据结构(顺序栈

目录 1. 讲解&#xff1a;2. C代码实现&#xff1a;小结&#xff1a; 1. 讲解&#xff1a; 用顺序的物理结构&#xff08;数组&#xff09;存储栈这个数据结构&#xff0c;实现栈的创建、销毁、增删查、判空。 top指针的指向位置有两种实现方法&#xff1a;一个是指向栈顶元素…

页缓存(PageCache)和预读机制(readahead )

页缓存&#xff08;PageCache)和预读机制&#xff08;readahead &#xff09; 页缓存&#xff08;PageCache)是操作系统&#xff08;OS&#xff09;对文件的缓存&#xff0c;用于加速对文件的读写。 page 是内存管理分配的基本单位&#xff0c; Page Cache 由多个 page 构成&…