如何使用Flutter与OpenHarmony通信 FlutterChannel

如何使用Flutter与OpenHarmony通信 FlutterChannel

本文介绍在Flutter OpenHarmony化工程中,如何使用 Flutter Channel 能力。

以下是关键实现代码,完整的demo请参考channel_demo

MethodChannel

dart代码:

// 创建实例final_platform =constMethodChannel('samples.flutter.dev/battery');// 调用方法 getBatteryLevelfinalresult = await _platform.invokeMethod<int>('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) {case"getBatteryLevel": that.api.getBatteryLevel(result);break;default: result.notImplemented();break; } } }) }

BasicMessageChannel

dart代码:

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: Reply<Any>) { Log.i(TAG,"message="+ message);if(message %2==0) { reply.reply("run with if case."); }else{ reply.reply("run with else case"); } } }) }

EventChannel

dart代码:

// 创建实例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());