news 2026/5/11 12:18:56

Flutter 与 OpenHarmony 通信:Flutter Channel 使用指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flutter 与 OpenHarmony 通信:Flutter Channel 使用指南

Flutter 与 OpenHarmony 通信:Flutter Channel 使用指南

欢迎大家加入跨平台社区
本文介绍在 Flutter OpenHarmony 化工程中,如何利用 Flutter Channel 实现 Dart 代码与 OpenHarmony 原生端(ETS)之间的通信。Flutter Channel 提供了灵活的消息传递机制,支持方法调用、基础消息通信和事件流三种常用模式。以下将分别说明其使用方法,并附上关键代码示例。

完整示例可参考 channel_demo。


1. MethodChannel(方法调用)

MethodChannel 用于调用平台提供的特定方法,并支持异步返回结果。

Dart 端代码
// 创建 MethodChannel 实例final_platform=constMethodChannel('samples.flutter.dev/battery');// 调用原生端方法 getBatteryLevelfinalresult=await_platform.invokeMethod<int>('getBatteryLevel');
ETS 端代码
onAttachedToEngine(binding:FlutterPluginBinding):void{letthat=this;// 创建 MethodChannel 实例this.channel=newMethodChannel(binding.getBinaryMessenger(),"samples.flutter.dev/battery");// 设置方法调用处理器this.channel.setMethodCallHandler({onMethodCall(call:MethodCall,result:MethodResult){switch(call.method){case"getBatteryLevel":that.api.getBatteryLevel(result);break;default:result.notImplemented();break;}}});}

2. BasicMessageChannel(基础消息通信)

BasicMessageChannel 用于简单的数据传递,支持双向异步消息收发。

Dart 端代码
int count=0;// 创建 BasicMessageChannel 实例final_basicChannel=constBasicMessageChannel("samples.flutter.dev/basic_channel",StandardMessageCodec());// 发送消息并接收回复Stringresult=await_basicChannel.send(++count)asString;
ETS 端代码
onAttachedToEngine(binding:FlutterPluginBinding):void{// 创建 BasicMessageChannel 实例this.basicChannel=newBasicMessageChannel(binding.getBinaryMessenger(),"samples.flutter.dev/basic_channel",newStandardMessageCodec());// 设置消息处理器this.basicChannel.setMessageHandler({onMessage(message:Any,reply:Reply<Any>){Log.i(TAG,"message="+message);if(message%2==0){reply.reply("run with if case.");}else{reply.reply("run with else case");}}});}

3. EventChannel(事件流通信)

EventChannel 用于从原生端向 Dart 端发送连续的事件流,适用于状态监听、实时数据推送等场景。

Dart 端代码
// 创建 EventChannel 实例final_eventChannel=constEventChannel('samples.flutter.dev/event_channel');// 监听事件流_eventChannel.receiveBroadcastStream().listen((event){setState((){message="EventChannel event=$event";});});
ETS 端代码
privateeventSink?:EventSink;onAttachedToEngine(binding:FlutterPluginBinding):void{letthat=this;// 创建 EventChannel 实例this.eventChannel=newEventChannel(binding.getBinaryMessenger(),"samples.flutter.dev/event_channel");// 设置流处理器this.eventChannel.setStreamHandler({onListen(args:Any,events:EventSink):void{that.eventSink=events;Log.i(TAG,"onListen: "+args);},onCancel(args:Any):void{that.eventSink=undefined;Log.i(TAG,"onCancel: "+args);}});}// 通过 EventSink 发送事件到 Dart 端that.eventSink?.success("Success at "+newDate());

总结

通过上述三种 Channel,你可以灵活实现 Flutter 与 OpenHarmony 平台之间的双向通信:

  • MethodChannel:适用于调用特定平台功能并获取返回结果。
  • BasicMessageChannel:适用于简单的异步数据交换。
  • EventChannel:适用于平台向 Flutter 持续推送事件的场景。

在实际开发中,建议根据通信需求选择合适的 Channel 类型,并注意处理好通信过程中的异常与生命周期管理。

如果遇到问题,欢迎在评论区交流讨论。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 4:50:23

基于Java的彩灯加工智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 毕设不用从零敲&#xff01;基于Java的彩灯加工智慧管理系统的设计与实现。该系统主要功能模块包括供应商管理、加工单位管理、产品管理、业务登记管理、交货单管理和供应商付款管理&#xff0c;满足普通员工和部门领导的数据录入查阅执行…

作者头像 李华
网站建设 2026/5/9 6:04:07

基于Java的影视剪辑智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 基于Java的影视剪辑智慧管理系统的设计与实现&#xff0c;提供了一种针对传统选题的优势、创新性和实用性的摆脱方案。该系统主要功能模块包括会员管理、视频管理、素材及任务日志等多个子系统&#xff0c;覆盖了从用户数据录入到项目导出…

作者头像 李华
网站建设 2026/5/2 21:58:59

强烈安利 10个降AIGC工具:专科生降AI率全攻略

在如今的学术写作中&#xff0c;AI 生成内容&#xff08;AIGC&#xff09;已经成为一个不可忽视的现象。对于专科生来说&#xff0c;论文写作不仅需要满足学术规范&#xff0c;还要避免被检测出 AI 生成痕迹&#xff0c;以免影响成绩或遭遇查重风险。这时候&#xff0c;AI 降重…

作者头像 李华
网站建设 2026/5/9 17:13:23

springboot欢乐亲子旅游网站-开题报告

目录项目背景研究意义核心功能技术选型创新点预期成果项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作项目背景 随着家庭旅游需求的增长&#xff0c;亲子旅游市场呈现快速发展趋势。传统旅游网站缺乏针对亲…

作者头像 李华
网站建设 2026/5/8 3:52:22

Linux命令-lprm(删除打印队列中任务)

&#x1f9ed;说明 lprm 命令是 Linux 系统中用于删除打印队列中任务的实用工具&#xff0c;可以取消误打印或不再需要的作业&#xff0c;避免资源浪费。 核心语法与选项 lprm 命令的基本语法如下&#xff1a; lprm [选项] [作业ID]下表列出了最常用的选项&#xff0c;它们能精…

作者头像 李华
网站建设 2026/5/10 11:22:48

5大突破!抖音视频批量采集工具让内容获取效率提升300%的实战指南

5大突破&#xff01;抖音视频批量采集工具让内容获取效率提升300%的实战指南 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在数字内容爆炸的时代&#xff0c;视频批量采集、无水印解析与智能内容获取已成为…

作者头像 李华