如何使用Flutter与OpenHarmony通信 FlutterChannel
如何使用Flutter与OpenHarmony通信 FlutterChannel本文介绍在Flutter OpenHarmony化工程中如何使用 Flutter Channel 能力。以下是关键实现代码完整的demo请参考channel_demo。MethodChanneldart代码// 创建实例final_platform constMethodChannel(samples.flutter.dev/battery);// 调用方法 getBatteryLevelfinalresult await _platform.invokeMethodint(getBatteryLevel);ets代码onAttachedToEngine(binding: FlutterPluginBinding):void{ let that this;// 创建实例this.channel newMethodChannel(binding.getBinaryMessenger(),samples.flutter.dev/battery);// 设置回调调用具体的实现this.channel.setMethodCallHandler({ onMethodCall(call: MethodCall, result: MethodResult) {switch(call.method) {casegetBatteryLevel: that.api.getBatteryLevel(result);break;default: result.notImplemented();break; } } }) }BasicMessageChanneldart代码intcount 0;// 创建实例final_basicChannel constBasicMessageChannel(samples.flutter.dev/basic_channel, StandardMessageCodec());// 调用方法获取平台侧的返回值Stringresult await_basicChannel.send(count)asString;ets代码onAttachedToEngine(binding: FlutterPluginBinding):void{// 创建实例this.basicChannel newBasicMessageChannel(binding.getBinaryMessenger(),samples.flutter.dev/basic_channel,newStandardMessageCodec());// 设置回调调用具体的实现this.basicChannel.setMessageHandler({ onMessage(message:Any, reply: ReplyAny) { Log.i(TAG,message message);if(message %20) { reply.reply(run with if case.); }else{ reply.reply(run with else case); } } }) }EventChanneldart代码// 创建实例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;// 创建实例this.eventChannel newEventChannel(binding.getBinaryMessenger(),samples.flutter.dev/event_channel);// 设置回调获取EventSinkthis.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());