【问题标题】:Override method onAttachedToEngine never gets called in FlutterPlugin在 FlutterPlugin 中永远不会调用覆盖方法 onAttachedToEngine
【发布时间】:2020-04-17 17:56:04
【问题描述】:

我正在尝试实现一个颤振插件,但不知何故,覆盖函数 onAttachedToEngine 永远不会被调用。据此doc

在调用 PluginRegistry.add(FlutterPlugin) 期间, FlutterEngine 将调用 onAttachedToEngine(FlutterPluginBinding) 给定的 FlutterPlugin。

但它永远不会被调用。不过我注意到的一件事是,它实际上在您第一次构建和调试应用程序时调用,并在此后的任何重建后停止。 这是我的代码:

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()
  }
}

}

【问题讨论】:

    标签: flutter kotlin


    【解决方案1】:

    在我的例子中,android 上的日志控制台只显示在 Logcat 上。因为我登录插件而不是示例所以很多一些闪烁隐藏它。但是 Logcat 显示了所有这些。所以我检查了Logcat上插件的日志。希望这些信息可以对我的情况有所帮助。

    【讨论】:

      【解决方案2】:

      这是预期的行为。

      在附加到 FlutterEngine 之后,立即调用此函数来设置新的MethodCallHandler。这是在onAttachedToEngine(AndroidX)或registerWith(非AndroidX)中​​完成的。

      实际上被多次调用的函数是onMethodCall,它会在你想要的任何时候从invokeMethod的颤动中被调用。

      热重启或热重载不会触发onAttachedToEngine,因为实际上,你还没有从引擎中分离出来,所以你需要去连接并重新连接它才能被触发。

      我希望这个澄清可以帮助你!

      【讨论】:

      • 好吧,我的意思实际上是重建,而不是热重启,但我认为它实际上每次都会调用但它不执行 println("Engine is attach!"),看起来很奇怪。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多