Flutter:无法从静态上下文中引用非静态方法registerWithRegistrar

问题描述

我正在处理可处理服务生成的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仓库在分支中

功能/代码增强

GITHUB REPOSITORY

有人知道如何解决此问题?谢谢。

解决方法

好吧……对于任何有此问题的人,解决方案是在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()
  }

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...