第四百零二回

文章目录

  • 知识回顾
  • 示例代码
  • 经验总结

我们在上一章回中介绍了MethodChannel的使用方法,本章回中将介绍EventChannel的使用方法.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

知识回顾

我们在前面章回中介绍了通道的概念和作用,并且提到了通道有不同的类型,本章回将其中一种通道:EventChannel.该通道主要通过Stream实现通信功能,该通道
主要用于消息类通信功能,它只能通过原生平台向Flutter程序发送消息,属于单向通信,本章回中将详细介绍它的使用方法。

示例代码

通道的使用方法在前面章节已经介绍过,不过比较抽象,我们在这里通过具体的示例代码来演示:

  1. 在Flutter中创建通道,使用构造方法就可以创建通道,方法的参数最好使用域名/功能名这样的形式,因为在原生代码中会通过该名称获取该通道;
  flutterEventChannel = EventChannel("www.acf.com/event");
  1. 监听通道中的方法或者事件.这里使用通道的receiveBroadcastStream()方法监听通道中的事件,它可以获取到方法的的返回值和错误信息。它本质上是Stream
    因此它的使用方法和Stream相同,我们已经介绍过Stream,因此不做详细介绍。
    var streamSubscription = flutterEventChannel.receiveBroadcastStream().listen((event) { debugPrint("data: ${event.toString()}");},onError: (e) => debugPrint('error: ${e.toString()}'),onDone: () => debugPrint('event done'),cancelOnError: true);}
  1. 在原生平台的代码中获取通道;这里继承了FlutterActivity类并且重写类中的configureFlutterEngine()方法,在该方法中获取通道;
class MainActivity: FlutterActivity() {private val eventChannel = "www.acf.com/event"//重写方法来设置chanel监听器,用来监听channel中的方法override fun configureFlutterEngine(flutterEngine: FlutterEngine) {super.configureFlutterEngine(flutterEngine)//通过方法中的flutterEngine获取MethodChannel对象val eventChannel = EventChannel(flutterEngine.dartExecutor.binaryMessenger,eventChannel)// 设置监听器用来监听channel中的事件var sHandler = StreamHandlerImpl()eventChannel.setStreamHandler(sHandler)}
}
  1. 给通道设置监听器,在监听器中实现原生平台上特有的功能;设置监听器通过setStreamHandler()方法实现,详细可以参考上面的代码片段。该方法需要传递一个
    StreamHandler类型的对象,我们创建一个该类的子类,并且在类中重写了相关的方法,在方法给给Stream回复消息,详细如下:
class StreamHandlerImpl : EventChannel.StreamHandler {override fun onListen(arguments: Any?, events: EventChannel.EventSink?) {events?.success("native event")}override fun onCancel(arguments: Any?) {TODO("Not yet implemented")}
}

上面的代码中使用回调方法的events参数给Stream回复消息,Stream收到消息后可以获取到消息的内容。
上面步骤中的3和4是在Andoird平台上编写的,位于MainActivity.kt文件中。我们还需要在IOS平台上实现类似的代码,我在这里就不演示了,因为它们的思路相同。

经验总结

本章回中介绍了EventChannel通道相关的知识,原生平台通过Stream给Flutter发送数据。这样便实现了通信功能。我在这里就不演示程序的运行结果了,建议大家
自己动手去实现。不过我分享一些编译时的经验。

  • EventChannel通道常用来发送一些消息,它的用法和Stream类似;
  • 编写channel中的代码时需要使用xCode打开flutter的项目;
  • 编写channel中的代码时最后使用androidStudio重新打开andorid项目,这样会自动生成android项目文件,而不要在原来的flutter项目中编辑android代码。
  • 运行时IOS原生代码需要使用xCode编译运行,Android原生代码需要在flutter项目中编译运行才有效果。
    看官们,与"如何使用EventChannel"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

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

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

相关文章

Qt 线程池 QThreadPool

一.Qt 线程池 QThreadPool介绍 Qt线程池是一种管理多个线程的并发编程模型,通过使用线程池可以提高性能、控制并发度、提供任务队列和简化线程管理。 在Qt中,线程池的使用主要涉及以下几个步骤: 创建任务类:需要定义一个任务类&am…

javaweb数据传参类型(2)

前言 友友们好呀,今天来分享一下对于各种数据类型传参的问题,今天陪伴我们的云海 目录 前言 数组集合传参 补充 日期参数 补充 Json格式数据传参 补充 路径参数 补充 今日分享 ​​​​​​​数组集合传参 类似于我们之前进行的简单的参数传递…

【C++】string的底层剖析以及模拟实现

一、字符串类的认识 C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理&a…

Android14之禁止vbmeta.img签名校验(一百九十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

区别于传统家!三翼鸟定制智慧家电家居一体化场景

在这个科技创新、智能AI主导的时代,寻求更便捷智慧、舒心适宜、一体化的居家场景,成为一个时代的命题和竞赛,也是家居行业共同奔赴的使命。在纷繁复杂的竞争格局和方向答案中,一条清晰坚定的路径正在显露出来…… AWE前一天&…

进线程学习--01

进程是一个独立的可调度的任务,是一个抽象实体。 程序来说进程是静态的,它是保存在磁盘上的有序的指令集合,没有任何执行的概念。 进程是一个动态的概念,它是程序的执行过程,包括创建,调度和消亡。 进程是程…

Jsp在Javaweb中扮演什么角色?

1.什么是Jsp JSP(Java Server Pages,Java 服务器页面)是一种动态网页技术,它允许在 HTML 页面中嵌入 Java 代码,并由 Web 服务器在请求页面时动态生成 HTML 页面。JSP 通常用于创建动态 Web 内容,如交互式表…

影城管理系统|基于springboot框架+ Mysql+Java+B/S架构的影城管理系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参考 摘要 研究…

基于单片机的步进电机升降速并行控制

摘 要:采用英飞凌单片机为核心控制器,设计并实现了一款基于单片机的步进电动机升降速控制系统。系统由键盘、显示器、报警电路以及步进电动机驱动电路构成;设计了检测系统,检测步进电机的转速和步数。根据步进电机动力学方程及矩频特性曲线建立系统数学模型,采用指数规律…

智慧文旅|AI数字人导览:让旅游体验不再局限于传统

AI数字人导览作为一种创新的展示方式,已经逐渐成为了VR全景领域的一大亮点,不仅可以很好的嵌入在VR全景中,更是能够随时随地为观众提供一种声情并茂的讲解介绍,结合VR场景的沉浸式体验,让观众仿佛置身于真实场景之中&a…

数据结构与算法--算法和算法分析

算法与数据结构之间存在密不可分的关系。简单来说,数据结构是存储和组织数据的方式,而算法则是操作和处理这些数据的方法。 首先,数据结构为算法提供了基础。算法是解决问题的步骤和流程,通过对数据结构进行操作,算法可…

【pyautogui】PyAutoGUI 的简单使用

文章目录 1 简介2 通用功能2.1 暂停/休眠/耗时2.2 自动防故障功能 3 鼠标控制3.1 移动鼠标3.2 获取鼠标指针位置3.3 点击鼠标3.4 拖动鼠标3.5 滚动鼠标3.6 常用方法 4 键盘控制4.1 输入字符串 write4.2 按键操作 press4.3 按下 & 释放4.4 组合键 hotkey4.5 键名 5 屏幕图像…

Postgresql 连接数查看,死锁问题解决

-- 查看所有连接 select * -- datname,pid,application_name,state from pg_stat_activity; -- 查询最大连接数 select max_conn-now_conn as resi_conn from (select setting::int8 as max_conn,(select count(*) from pg_stat_activity) as now_conn from pg_settings where…

MySQL系列-索引

索引是一种用于快速查询和检索数据的数据结构,其本质上可以看成是一种排序好的数据结构。 选择合适的字段创建索引 不为NULL的字段被频繁查询的字段被作为条件查询的字段频繁需要被排序的字段:索引已经排序,这样查询可以利用索引的排序&…

2.1 关系数据结构及形式化定义 数据库概论

目录 2.1.1 关系 关系:概念 1. 域(Domain) 2.笛卡尔积 元组(Tuple) 分量(Component) 基数(Cardinal number) 3. 关系 候选码(Candidate key&#xf…

Centos7.6升级系统版本到Centos7.9

文章目录 前言一、查看当前版本二、更换yum源并升级1.更换yum源2.执行升级并重启 三、查看升级结果总结 前言 Centos7.6升级系统版本到Centos7.9 参考:https://www.cnblogs.com/wutao-007/p/16921927.html 一、查看当前版本 cat /etc/redhat-release 结果输出 Ce…

软件设计师17--磁盘管理

软件设计师17--磁盘管理 考点1:存储管理 - 磁盘管理调度算法磁盘调度 - FCFS磁盘调度 - SSTF例题: 考点1:存储管理 - 磁盘管理 存取时间寻道时间等待时间,训导时间是指磁头移动到磁道所需的时间;等待时间为等待读写的扇…

网工内推 | 上市公司网工,IE认证优先,最高18K*13薪,包吃住

01 深圳市宝腾互联科技有限公司 招聘岗位:网络工程师 职责描述: 1、是整个数据中心的网络技术及安全问题的负责人,确保数据中心业务的正常进行; 2、负责规划、设计、搭建、维护数据中心的网络环境,确保IDC /云平台&a…

使用Excel导入和导出数据

功能技术&#xff1a;SpringBoot&#xff0c;vue3&#xff08;restful&#xff09; 前端代码实现 首先在前端写一个上传和导出功能。 <template><!-- 文件上传 --><el-upload class"upload-demo" drag action"" :on-change"onChan…

python INI文件操作与configparser内置库

目录 INI文件 configparser内置库 类与方法 操作实例 导入INI文件 查询所有节的列表 判断某个节是否存在 查询某个节的所有键的列表 判断节下是否存在某个键 增加节点 删除节点 增加节点的键 修改键值 保存修改结果 获取键值 获取节点所有键值 其他读取方式 …