在《flutter-boost的集成与基本使用(android与flutter的混合开发)》中提到了在大部分情况下,我们不满足于简单的跳转,想要android原生和flutter进一步的融合,需要借助MethodChannel,利用它我们可以更好的完成原生与flutter页面的数据交互。
一、MethodChannel的实现:
(1)在android中,可以定义一个flutterPlugin,进行集中管理,代码如下:
package com.innovation.projector.plugin
import android.widget.Toast
import com.innovation.projector.MyApplication
import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.PluginRegistry
class FlutterNativePlugin : FlutterPlugin, MethodChannel.MethodCallHandler {
override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
//name必须和dart端的保持一致
val channel = MethodChannel(binding.flutterEngine.dartExecutor, "com.innovation/name")
channel.setMethodCallHandler(FlutterNativePlugin())
}
companion object {
fun registerWith(registrar: PluginRegistry.Registrar) {
val channel = MethodChannel(registrar.messenger(), "com.innovation/name")
channel.setMethodCallHandler(FlutterNativePlugin())
}
}
override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
}
override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
when (call.method) {
"androidMethodTest" -> result.success("android原生执行::" + call.arguments.toString() + call.method)
"androidMethodToast" -> {
Toast.makeText(
MyApplication.getGloba