问题描述
我正在处理可处理服务生成的flutter插件。 但是最近我发现Flutter-Framework使用的 GeneratedPluginRegistrant 问题。
当我执行此命令时:
颤动
结果是构建失败,并显示以下消息。
GeneratedPluginRegistrant.java:14:错误:非静态方法 无法从静态上下文引用registerWith(Registrar) FloatyHeadPlugin.registerWith(registry.registrarFor(“ ni.devotion.floaty_head.FloatyHeadPlugin”));
但是据我所知,在插件Kotlin类中,该函数与要作为静态函数处理的Companion内部没有关系,而且如果我更改该错误也不会消失...
class FloatyHeadPlugin : Activity(),MethodCallHandler {
companion object {
lateinit var instance: FloatyHeadPlugin
var activity: Activity? = null
var context: Context? = null
var sBackgroundFlutterView: FlutterNativeView? = null
var sIsIsolateRunning = AtomicBoolean(false)
private var channel: MethodChannel? = null
private var backgroundChannel: MethodChannel? = null
}
fun registerWith(pluginRegistrar: Registrar) {
context = pluginRegistrar.context()
channel = MethodChannel(pluginRegistrar.messenger(),METHOD_CHANNEL)
channel?.setMethodCallHandler(FloatyHeadPlugin())
}
如果您想了解更多详细信息,还可以检查github仓库在分支中
功能/代码增强
有人知道如何解决此问题?谢谢。
解决方法
好吧……对于任何有此问题的人,解决方案是在FlutterPlugin类中实现扩展ActivityAware。
并实现以下功能:
override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
channel?.setMethodCallHandler(null)
//release()
}
override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
channel = MethodChannel(flutterPluginBinding.binaryMessenger,METHOD_CHANNEL)
channel?.setMethodCallHandler(this)
}
override fun onAttachedToActivity(binding: ActivityPluginBinding) {
activity = binding.activity
instance = this@FloatyHeadPlugin
}
override fun onDetachedFromActivity() {
//release()
}
override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
activity = binding.activity
}
override fun onDetachedFromActivityForConfigChanges() {
//release()
}