前言
上篇文章说到了android 嵌入flutter后,通过自定义Activity去继承FlutterActivity,然后重写部分方法去打开一个FlutterActivity去达到我们想要的效果。这篇文章我们讲一下两者如何交互,并且同样适用于纯Flutter项目中,Flutter 和原生交互
主要是需要通过 PlantformChannel 进行交互,PlantformChannel 有三种类型,BasicMessageChannel,EventChannel,MethodChannel。具体可以看这篇文章深入理解Flutter Platform Channel
正文
BasicMessageChannel,主要用于双向传递字符串和半结构化消息传递消息
class BasicTestChannel(dartExecutor: DartExecutor) : MessageHandler<String> {
private val tag: String = "BasicTestChannel"
private val basicMessageChannel =
BasicMessageChannel(dartExecutor, "com.zww/basic", StringCodec.INSTANCE)
fun send(content: String, callback: Reply<String>) {
basicMessageChannel.send(content, callback)
Log.d(tag, "android发送flutter内容为: $content")
}
init {
basicMessageChannel.setMessageHandler(this)
}
override fun onMessage(message: String?, reply: Reply<String>) {
Log.d(tag, "android收到flutter的消息: $message")
reply.reply("android收到flutter的消息,内容为$message")
}
fun removeMessageHandler() {
basicMessageChannel.setMessageHandler(null)
}
}
onMessage是收到Flutter发送的消息的回调,然后调用reply方法可以回复
send方法是发送消息到Flutter,第二个参数是Flutter收到消息回复的回调
使用
class MyFlutterActivity : FlutterActivity() {
private lateinit var basicTestChannel: BasicTestChannel
override fun provideFlu