当前位置: 首页 > news >正文

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 类型,并注意处理好通信过程中的异常与生命周期管理。

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

http://www.jsqmd.com/news/357240/

相关文章:

  • 重要发布丨新增支持工作流知识库和数据源工具,MaxKB开源企业级智能体平台v2.4.0版本发布 - 详解
  • 去除前导 0 的经典代码
  • ‌大模型测试脚本生成器:基于GPT-5的跨语言自动化代码转换工具‌
  • 别让大模型“学废了”!从数据清洗到参数调优,一次讲透微调实战
  • XCVP1802-2MSILSVC4072 AMD Xilinx Versal Premium Adaptive SoC FPGA - 实践
  • 电子世界的奇妙冒险:03-2 同一道物理魔法,两种现代生活——电磁炉与无线充电的“热能”与“电能”变形记
  • 西科(盐城)表面涂层品牌吗,选购要点有哪些 - 工业设备
  • 基于Springboot+Vue的少数民族传统服饰销售商城平台设计与实现
  • 选购冠豪门窗,市场口碑在业内排名怎样售后服务好吗 - mypinpai
  • 深度测评!学生热捧的一键生成论文工具 —— 千笔ai写作
  • 基于Java的影视剪辑智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • ‌认知增强测试:脑机接口在人类决策偏见的矫正验证工具‌
  • QuickViewer|开源秒开看图工具,最终版且藏且珍惜
  • 格式总出错?8个AI论文工具测评:继续教育毕业论文+科研写作全攻略
  • 星链下行信号反向工程的参考文献,附下载网盘链接
  • AGI对齐问题的测试方法论白皮书
  • 【GitHub项目推荐--AI-Trader:多AI代理金融市场交易竞技平台】⭐⭐⭐⭐
  • 百考通问卷结构设计:从“随意提问“到“精准布局“
  • 基于Java的影片招商引资智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 11 DNS域名服务和通信安全
  • 基于Java的影片评审智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 精准识别AI生成内容,守护学术与创作诚信
  • 【回眸】Tessy集成测试(二)之常见的问题汇总及解答 - 教程
  • 反传统学习APP,摒弃固定课程顺序,根据用户做题正确性,学习速度,动态调整课程难度,比如某知识点学不会,自动推荐基础讲解和练习题,学习后再进阶,不搞一刀切。
  • 基于Java的彩砂库存智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 基于Java的彩票游戏智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • HoRain云--解决npm报错的终极指南
  • HoRain云--SpringBoot常用注解全解析
  • 基于Java的彩艺印刷智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • HoRain云--Nacos启动报错全攻略:秒查速解