用於双向的单次讯息传递,包括发送讯息、接收讯息两个功能
经过以上的实作,其实两端的通讯步骤都差不多,首先在两端建立想要
Channel
并指定名称,且在两端通道名称需对应,传送端对接收端发讯息来执行Channel
的对应的动作(执行Native 端方法,或监听Native 端讯息,亦或发送讯息至Native 端讯息),接收端建立完对应的Channel
後要建立handler
处理从传送端来的讯息执行对应动作,并回传结果
Flutter 端
新增BasicMessageChannel
并指定名称,且新增要从Flutter 端传讯息给Native 端的方法,并回传Native 端要回覆的讯息
lib/batterylevel.dart
:
static const BasicMessageChannel _messageChannel =
const BasicMessageChannel('chat_message', StringCodec());
static Future<String> messageResponse(String message) async {
final String response = await _messageChannel.send(message);
return response;
}
Native 端(Android):
android/.../BatterylevelPlugin.kt
:
private lateinit var messageChannel: BasicMessageChannel<String>
override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
//Added
messageChannel = BasicMessageChannel(
flutterPluginBinding.binaryMessenger,
"chat_message",
StringCodec.INSTANCE
)
messageChannel.setMessageHandler { message, reply ->
val response = if(message.isNullOrEmpty()) "" else "Android 收到:$message"
reply.reply(response)
}
}
override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
//Added
messageChannel.setMessageHandler(null)
}
Native 端(iOS):
ios/Classes/RandomNumberStreamHandler.swift
public class SwiftBatterylevelPlugin: NSObject, FlutterPlugin {
public static func register(with registrar: FlutterPluginRegistrar) {
//Added
let messageChannel = FlutterBasicMessageChannel(name: "chat_message", binaryMessenger: registrar.messenger(),codec: FlutterStringCodec.sharedInstance())
messageChannel.setMessageHandler {
(message: Any?, reply: FlutterReply) -> Void in
reply((message as! String) != "" ? "iOS 收到:\(message as! String)" : "");
}
}
}
以上就完成运用Platform Channel
来实作平台两端的通讯了,[范例程序都在这](
<<: 17. PHPer x Code Quality Tool
>>: Day17 Combine 04 - Operators 主要类型
我最近在考虑要找人来帮忙管理我们的 App。请认识的人介绍时,我说工作内容包括:看用户的反馈然後分类...
第 20 天~ 走到了三分之二了~!!! 好激动阿!! 再接再厉~ 加油! 昨天把 To Do Li...
Promise:适用於非同步的运算上。 本身就是建构函式 console.log(Promise);...
-ISO 31000 本问题旨在推广 ISO 31000 风险评估的概念。年化预期损失 (ALE)...
今天继续更新和应用程序有关的攻击方式。 例外处理 例外处理是指软硬体在执行程序的过程中发生非预期状况...