FlutterPluginBinding.flutterEngine устарел - PullRequest
0 голосов
/ 06 мая 2020

Я разрабатываю плагин Flutter , проблема в том, что FlutterPluginBinding.flutterEngine получить FlutterEngine устарело. Полный код ниже:

class AMPlugin : FlutterPlugin, MethodCallHandler, ActivityAware, PluginRegistry.ActivityResultListener {
    private lateinit var channel: MethodChannel
    private var activity: Activity? = null

    override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
        val engine = flutterPluginBinding.flutterEngine
        channel = MethodChannel(engine.dartExecutor, "aM")
        channel.setMethodCallHandler(this)
    }

    override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {
        when (call.method) {
            else -> result.notImplemented()
        }
    }

    override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
        channel.setMethodCallHandler(null)
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?): Boolean {
        return true
    }

    override fun onDetachedFromActivity() {
        activity = null
    }

    override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
        activity = binding.activity
    }

    override fun onAttachedToActivity(binding: ActivityPluginBinding) {
        activity = binding.activity
    }

    override fun onDetachedFromActivityForConfigChanges() {
        activity = null
    }

    companion object {

        @Suppress("UNUSED")
        @JvmStatic
        fun registerWith(registrar: Registrar) {
            val channel = MethodChannel(registrar.messenger(), "aM")
            channel.setMethodCallHandler(AMPlugin())
        }
    }
}

Но я не могу понять, как получить FlutterEngine или инициализировать MethodChannel другим способом. Я пробовал использовать val engine = FlutterEngine(binding.applicationContext), но это приводит к краху sh, кажется, требуется Activity context.

Как заменить устаревший API?

1 Ответ

4 голосов
/ 06 мая 2020

заменить:

    channel = MethodChannel(engine.dartExecutor, "aM")

на

    channel = MethodChannel(flutterPluginBinding.getBinaryMessenger(), "aM")
...