写点什么

Flutter 与鸿蒙原生交互二

作者:flfljh
  • 2024-11-05
    湖南
  • 本文字数:1257 字

    阅读完需:约 4 分钟

Flutter 与鸿蒙原生交互二

flutter 有三种基础的通道

  • MethodChannel:主要方式,调用原生方法并接收返回值,适合一次性调用。

  • EventChannel事件流/数据流的持续通信,如监听传感器数据。

  • BasicMessageChannel:传递 字符串或二进制信息,适合 双向通信快速连续传递简单数据

BasicMessageChannel(双向通道)

1.flutter 端代码


  • 创建 BasicMessageChannel 通道

  • 调用平台创建方法接收回调参数


// 创建实例final _basicChannel = const BasicMessageChannel(      "flutter.ohos.example/base_test", StandardMessageCodec());// 调用方法,获取平台侧的返回值final String? reply = await _basicChannel.send('increment');
复制代码


2.ohos 端代码


  • 继承 FlutterPlugin 实现 onAttachedToEngine 方法

  • 创建 BasicMessageChannel 实例(名字需要与 flutter 端保持一致)

  • onMessage 回调中监听回调方法

  • reply 回传参数


export default class TestPlugin implements FlutterPlugin {// 继承FlutterPlugin    private basicChannel?: BasicMessageChannel<Any>;    private counter = 0 ;    onAttachedToEngine(binding: FlutterPluginBinding): void {      this.basicChannel = new BasicMessageChannel(binding.getBinaryMessenger(),"flutter.ohos.example/base_test", new StandardMessageCodec());    this.basicChannel.setMessageHandler({      onMessage(message: Any, reply: Reply<Any>) {        Log.i(TAG, "收到Flutter端的信息,当前计数器值: $counter");        // 处理来自 Flutter 的消息             counter++             reply.reply("计数器值: $counter")      }    })  }}
复制代码

EventChannel(事件监听)

1.flutter 端代码


  • 创建 MethodChannel 通道

  • 调用平台创建方法接收回调参数


// 创建实例final _eventChannel = const EventChannel('flutter.ohos.example/event_test');// 监听事件回调_eventChannel.receiveBroadcastStream().listen((event) {      print("EventChannel event=$event")    });
复制代码


2.ohos 端代码


  • 继承 FlutterPlugin 实现 onAttachedToEngine 方法

  • 创建 EventChannel 实例(名字需要与 flutter 端保持一致)

  • 设置 eventSink

  • 使用 eventSink 发送数据到 flutter 层


export default class TestPlugin implements FlutterPlugin {// 继承FlutterPlugin    private eventChannel?: EventChannel;  private eventSink?: EventSink;    onAttachedToEngine(binding: FlutterPluginBinding): void {      this.eventChannel = new EventChannel(binding.getBinaryMessenger(), "flutter.ohos.example/event_test");    this.eventChannel.setStreamHandler({      onListen(args: Any, events: EventSink): void {        that.eventSink = events;      },      onCancel(args: Any): void {        that.eventSink = undefined;      }    });  }}
复制代码


发送数据


// ...// 使用 EventSink 发送数据后,dart断的事件监听回调会收到发送的数据。that.eventSink?.success("eventSink message ");
复制代码


发布于: 刚刚阅读数: 4
用户头像

flfljh

关注

还未添加个人签名 2024-10-29 加入

还未添加个人简介

评论

发布
暂无评论
Flutter与鸿蒙原生交互二_鸿蒙_flfljh_InfoQ写作社区