news 2026/5/1 6:17:18

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/1 5:02:59

HoRain云--优化SSH连接速度:CentOS服务器实战指南

&#x1f3ac; HoRain云小助手&#xff1a;个人主页 &#x1f525; 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;…

作者头像 李华
网站建设 2026/5/1 5:04:01

深度测评!学生热捧的一键生成论文工具 —— 千笔ai写作

你是否曾为论文选题发愁&#xff0c;反复修改却总对结果不满意&#xff1f;面对文献检索的繁琐、格式排版的复杂、查重率的焦虑&#xff0c;你是否感到力不从心&#xff1f;论文写作不仅是学术能力的考验&#xff0c;更是时间与精力的挑战。而如今&#xff0c;一款专为学生打造…

作者头像 李华
网站建设 2026/5/1 5:02:49

leetcode 922. Sort Array By Parity II 按奇偶排序数组 II-耗时100

Problem: 922. Sort Array By Parity II 按奇偶排序数组 II 耗时100%&#xff0c;一个指针就行了&#xff0c;若满足题意则l&#xff0c;r l1&#xff0c;若满足题意或者nums[l]和nums[r]奇偶性相同则r&#xff0c;此时一定满足nums[l]和nums[r]不符合题意且奇偶性不同&#x…

作者头像 李华
网站建设 2026/5/1 6:16:28

自动化工具Drissonpage 保姆级教程(含xpath语法)

自动化工具Drissonpage 保姆级教程(含xpath语法) 说明&#xff1a;本指南仅供技术研究与学习使用&#xff0c;请严格遵守相关法律法规&#xff0c;仅将自动化技术应用于合法合规的场景&#xff0c;如&#xff1a;公开数据的采集与分析、企业内部系统的自动化测试、个人工作效率…

作者头像 李华
网站建设 2026/5/1 2:48:23

8086/8088实模式的内存布局

8086/8088 是 Intel 早期的 16 位处理器&#xff0c;工作在 实模式&#xff08;Real Mode&#xff09; 下。其内存布局具有鲜明的时代特征&#xff0c;深刻影响了后续 x86 架构的设计。 一、核心特性 20 位地址线 1MB 寻址空间 地址总线&#xff1a;20 根&#xff08;A0–A19…

作者头像 李华
网站建设 2026/4/30 20:52:24

【137页ppt】AI赋能一人公司PPT:2026年OPC商业模式全景解析

OPC (One-Person Company) Development Report 2026摘要本报告由清新研究团队于2026年1月发布&#xff0c;全面解析一人公司(OPC)在AI时代的商业模式与发展趋势。报告揭示了个人品牌如何成为去中心化时代的核心资产&#xff0c;通过智能化工具链构建从商机发现到交易闭环的完整…

作者头像 李华