Flutter: на нестатический метод registerWith(Registrar) нельзя ссылаться из статического контекста

Я работаю над плагином флаттера, который обрабатывает генерацию службы. Однако недавно я обнаружил проблему с GeneratedPluginRegistrant, которую использует Flutter-Framework.

Когда я выполняю эту команду:

порхающий бег

Результатом является ошибка сборки со следующим сообщением.

GeneratedPluginRegistrant.java:14: ошибка: на нестатический метод registerWith(Registrar) нельзя ссылаться из статического контекста FloatyHeadPlugin.registerWith(registry.registrarFor(ni.devotion.floaty_head.FloatyHeadPlugin));

Однако, насколько я знаю, в классе плагинов Kotlin эта функция не связана внутри компаньона, который будет обрабатываться как статическая функция, и не имеет значения, если я изменю, что ошибка не исчезнет...

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

Кто-то знает, как решить эту проблему? Спасибо.


person Luis Cardoza Bird    schedule 13.09.2020    source источник


Ответы (1)


Ну... для всех, у кого есть эта проблема, решение состоит в том, чтобы реализовать в вашем классе 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()
  }
person Luis Cardoza Bird    schedule 17.09.2020