news 2026/6/23 14:14:29

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/6/20 1:52:43

C++名称空间:解决命名冲突的终极武器

C名称空间&#xff1a;解决命名冲突的终极武器 什么是名称空间&#xff1f; 在C开发中&#xff0c;随着项目规模扩大和第三方库的增加&#xff0c;命名冲突问题越来越常见。想象一下&#xff1a;两个库都定义了List、Tree类&#xff0c;但实现方式不同&#xff0c;你该如何同时…

作者头像 李华
网站建设 2026/6/20 4:06:13

导师严选! 降AIGC平台 千笔 VS Checkjie,专科生专属高效之选

在AI技术不断渗透学术领域的今天&#xff0c;越来越多的专科生开始借助AI工具辅助论文写作&#xff0c;以提升效率和内容质量。然而&#xff0c;随着高校对AI生成内容的审查日益严格&#xff0c;论文中的“AI痕迹”和“查重率超标”问题逐渐成为毕业路上的隐形障碍。许多学生在…

作者头像 李华
网站建设 2026/6/13 3:06:21

OpenViking上下文数据库Golang集成实践

引言 随着AI Agent从简单的单轮对话处理器演变为能够执行复杂长周期任务的智能实体,上下文管理已成为制约Agent能力发展的关键瓶颈。传统RAG系统采用扁平化的向量存储模式,导致记忆碎片化、检索质量差、调试困难,且缺乏Agent自身的经验沉淀机制。 2026年1月,字节跳动火山…

作者头像 李华
网站建设 2026/6/20 13:35:44

HoRain云--解决npm报错的终极指南

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

作者头像 李华
网站建设 2026/6/18 21:02:41

HoRain云--Nacos启动报错全攻略:秒查速解

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

作者头像 李华
网站建设 2026/6/13 20:53:59

深度测评 一键生成论文工具 千笔 VS 云笔AI 本科生专属

随着人工智能技术的迅猛发展&#xff0c;AI辅助写作工具已逐渐成为高校学生完成毕业论文的重要帮手。从选题构思到内容撰写&#xff0c;再到格式调整与查重优化&#xff0c;AI工具正在重塑学术写作的流程与效率。然而&#xff0c;面对市场上种类繁多、功能各异的AI写作平台&…

作者头像 李华