第二百五十九回

2024-01-12 11:44
文章标签 二百五十 九回

本文主要是介绍第二百五十九回,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

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

我们在上一章回中介绍了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.chinasem.cn/article/597760

相关文章

二百五十九、Java——采集Kafka数据,解析成一条条数据,写入另一Kafka中(一般JSON)

一、目的 由于部分数据类型频率为1s,从而数据规模特别大,因此完整的JSON放在Hive中解析起来,尤其是在单机环境下,效率特别慢,无法满足业务需求。 而Flume的拦截器并不能很好的转换数据,因为只能采用Java方式,从Kafka的主题A中采集数据,并解析字段,然后写入到放在Kafka主题B中 二 、原始数据格式 JSON格式比较正常,对象中包含数组 {     "deviceNo":

每天一个数据分析题(二百五十八)

表结构数据分析工具不自己产生数据而是通过获取其他数据源数据进行分析,表结构数据分析工具获取其他数据源的方式是? A. 引用 B. 应用 C. 复制 D. 汇总 题目来源于CDA模拟题库 点击此处获取答案

每天一个数据分析题(二百五十四)

在大数据时代背景下,我们使用的数据主要包含两种类别,一种称为结构化数据,另一种称为非结构化数据。请问以下哪个选项属于非结构化数据? A. 利润表 B. 短视频 C. 产品库存表 D. 产品进货表 题目来源于CDA模拟题库 点击此处获取答案

一起talk C栗子吧(第一百二十九回:C语言实例--C程序内存布局一)

各位看官们,大家好,上一回中咱们说的是查看当前进程信息的例子,这一回咱们说的例子是:C程序内存布局。闲话休提,言归正转。让我们一起talk C栗子吧! 看官们,我们编写的每一个C程序都会被加载到内存中运行,那么C程序在内存中是如何存放的呢?我们今天一起来看看C程序在内存中的布局。 C程序在内存中主要有四个分区,它们分别是代码区,数据区,堆区和栈区。这些区域从低地址向高地址依次排列。为了大

一起Talk Android吧(第一百二十九回:Android自定义View六)

各位看官们,大家好,上一回中咱们说的是Android中自定义View的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起Talk Android吧! 看官们,我们在上一回中查看了LinearLayout类中的onMeasure方法,这一回中我们查看该类的onLayout方法,源代码如下: protected void onLayout(boolean changed, int l,

一起Talk Android吧(第二百三十九回:Android中Activity之间的数据传递一)

各位看官们大家好,上一回中咱们说的是Android中Activity之间跳转的例子,这一回咱们说的例子是Activity之间的数据传递。闲话休提,言归正转。让我们一起Talk Android吧! 看官们,我们在上一回中介绍了Activity之间的跳转,其实在跳转的同时我们可以借助intent来传递一些简单的数值,具体的操作如下: 1.复用上一回中的两个Activity:A和B;以及跳转时使用的

第三百五十九回

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 013pickers2.gif 我们在上一章回中介绍了"如何实现Numberpicker"相关的内容,本章回中将介绍wheelChoose组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的wheelChooser是一个三方包,它

第二百八十九回

文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择多个图片和视频文件"相关的内容,本章回中将介绍如何通过相机获取视频文件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在前面章回中介绍的选择图片或者视频文件的方式都是通过文件窗口进行的,本章回中将介绍如何通过相机获

第二百七十九回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何播放视频"相关的内容,本章回中将介绍如何选择单个图片文件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在前面章回中介绍了加载本地图片和播放视频相关的内容,它们需要获取文件在本地存储的绝对路径,我们在很早的章回中介绍过p

C++20结构化绑定应用实例(二百五十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android系统攻城狮 1.前言 本篇目的:C++20结构化绑定应用实例。 2.