赞
踩
主要是用于Flutter调用原生的方法(执行一个原生的行为更合适)
用于Flutter Native双向流式通信
主要用于Native平台单独向Flutter发送事件消息流,更强调单向用途,比如传感器事件监听
以下示例在Flutter中调用一个native方法,这个方法叫做test,并且携带了一个String类型的参数
//第一步:创建MethodChannel对象,注意ID的唯一性
const nativeMethod = MethodChannel('com.test.method');
//第二步:执行方法调用,这里执行一个叫test 的 native的方法,并且传输了一个String类型的参数
var res= await nativeMethod.invokeMethod("test","Hello I am argument");
// res 就是原生的方法返回值
特别注意:
关于Native端的各种Channel初始化建议都放在
FlutterActivity#configureFlutterEngine
//第一步:创建MethodChannel对象 var methodChanel=MethodChannel(flutterEngine!!.dartExecutor.binaryMessenger,"com.test.method"); //第二步:设置Handler methodChanel.setMethodCallHandler { call, result -> run { if (call.method == "test") { //test方法回应 result.success("Hi your argument:"+call.arguments); } else { result.notImplemented() } } }
//第一步:创建BasicMessageChannel对象并确定编解码器 BasicMessageChannel<String> basicMessageChannel = BasicMessageChannel("com.test.basic", StringCodec()); //第二步:发送消息(如果你需要) void sendBasicMessage(String msg) { basicMessageChannel.send(msg); } //第三步:设置消息Handhdler(接受到native的消息后,你需要做什么) void setUpReceiveMessage(Function(dynamic content) callBackContent) { basicMessageChannel.setMessageHandler((dynamic message) async { // 处理收到的消息 print('Received message: $message'); callBackContent(message); return 'Received!'; }); }
//第一步:初始化(在FlutterActivity#configureFlutterEngine方法中做) //注意这里的id是com.test.basic必须和dart端保持一致 var basicMessageChannel = BasicMessageChannel(flutterEngine!!.dartExecutor.binaryMessenger, "com.test.basic", StringCodec.INSTANCE); //第二步:设置Handler(当收到消息之后做什么) basicMessageChannel.setMessageHandler { message, reply -> run { // 处理收到的消息 d(tag, "收到Flutter消息 " + message); // 回复一个消息 reply.reply("Reply from Java: received"); sendMessage("Reply from Java: received"); } } //第三步:sendMessage(如果你又这个需要) private fun sendMessage(message: String) { basicMessageChannel.send(message) { reply: String? -> // 处理Dart回复的消息 d("MainActivity", "Received reply: $reply") } }
///第一步 初始化EventChanel,注意这里的Channel Id需要和native保持一致 EventChannel eventChannel = EventChannel('com.test.event/channel'); // 第二步:注册监听(监听来自原生平台的数据流) // 可以放在initState的方法中去做 void listenToNativeStream(Function(dynamic content) eventCallBack) { eventChannel.receiveBroadcastStream().listen((dynamic event) { // 处理原生平台发来的数据 print('Received event: $event'); eventCallBack("${event}"); }, onError: (dynamic error) { // 处理错误 print('Received error: ${error.message}'); }); }
//第一步:初始化(建议放在FlutterActivity#configureFlutterEngine方法中) var eventChannel =EventChannel(flutterEngine!!.dartExecutor.binaryMessenger,"com.test.event/channel") // 第二步:设置流处理器 eventChannel.setStreamHandler(object : EventChannel.StreamHandler { //注意这里有个坑:arguments 类型必须是Any? 如果是Any可能会因为发生运行时错误 override fun onListen(arguments: Any?, events: EventSink) { //第三步:保存EventSink以便之后发送事件 eventSink = events // 你可以在这里开始发送事件,比如连接到一个传感器或其他数据源 } override fun onCancel(arguments: Any) { // 清理资源,停止发送事件 eventSink = null } }) //第四步:使用EventSink发送消息 private fun sendEventToFlutter(event: String) { if (eventSink != null) { eventSink!!.success(event) } }
Demo 地址
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。