Flutter Override方法onAttachedToEngine在插件中永远不会被调用

Flutter Override方法onAttachedToEngine在插件中永远不会被调用,flutter,kotlin,Flutter,Kotlin,我试图实现一个flatter插件,但不知何故,覆盖函数onAttachedToEngine从未被调用。据此, 在调用PluginRegistry.add(flatterplugin)期间 FlatterEngine将在上调用onAttachedToEngine(FlatterPluginBinding) 给定的插件 但它从未被调用。但我注意到的一点是,它实际上在您第一次构建和调试应用程序时调用,并在此后的任何重建后停止。 这是我的密码: public class Plugin : Flutter

我试图实现一个flatter插件,但不知何故,覆盖函数
onAttachedToEngine
从未被调用。据此,

在调用PluginRegistry.add(flatterplugin)期间 FlatterEngine将在上调用onAttachedToEngine(FlatterPluginBinding) 给定的插件

但它从未被调用。但我注意到的一点是,它实际上在您第一次构建和调试应用程序时调用,并在此后的任何重建后停止。 这是我的密码:

public class Plugin : FlutterPlugin, MethodCallHandler { 

override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
  channel = MethodChannel(flutterPluginBinding.getFlutterEngine().getDartExecutor(), "flutter_plugin")
  channel.setMethodCallHandler(this)
  println("Engine is attached!")
}

companion object {
  @JvmStatic
  fun registerWith(registrar: Registrar) {
    val channel = MethodChannel(registrar.messenger(), "flutter_blockstack")
    channel.setMethodCallHandler(FlutterBlockstackPlugin())
    println("Registered!")
  }
}


override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {
if (call.method == "getPlatformVersion") {
    result.success("Android ${android.os.Build.VERSION.RELEASE}")
  } else {
    result.notImplemented()
  }
}

}这是预期的行为

连接到FlatterEngine后,立即调用此函数以设置新的
MethodCallHandler
。这可以在
onAttachedToEngine
(AndroidX)或
注册表(非AndroidX)中完成

实际上被多次调用的函数是
onMethodCall
,它可以在任何时候通过
invokeMethod
从flatter调用

热重新启动或热重新加载不会触发已连接的发动机,因为实际上,您尚未从发动机上分离,因此需要断开并重新连接才能触发


我希望这个澄清能对你有所帮助

这是预期的行为

连接到FlatterEngine后,立即调用此函数以设置新的
MethodCallHandler
。这可以在
onAttachedToEngine
(AndroidX)或
注册表(非AndroidX)中完成

实际上被多次调用的函数是
onMethodCall
,它可以在任何时候通过
invokeMethod
从flatter调用

热重新启动或热重新加载不会触发已连接的发动机,因为实际上,您尚未从发动机上分离,因此需要断开并重新连接才能触发


我希望这个澄清能对你有所帮助

我实际上是指重建,不是热重启,但我认为它实际上每次都调用,但它不执行println(“引擎已连接!”),这似乎很奇怪。我实际上是指重建,不是热重启,但我认为它实际上每次都调用,但它不执行println(“引擎已连接!”),这似乎很奇怪。