Как заменить AndroidTouch + Keyprocessor после обновления 1.12 (не рекомендуется FlutterView) - PullRequest
0 голосов
/ 10 февраля 2020

Мне нужно эта проблема с GitHub исправлена, поэтому я сам покопался в ошибке. Я немного застрял, но вот что у меня получилось:

После обновления Flutter 1.12 API, использующий FlutterView , теперь извращен и вместо него встраивает пакеты должен быть использован. В основном, код платформы c java / android / kotlin должен взаимодействовать с флаттером через DartExecutor или через обратные вызовы из каналов метода . Однако я не могу найти информацию о том, как добавить новые вызовы кнопок с помощью плагина dart.

Насколько я понимаю этот код (также ниже) , используемый рендерером Flutter переопределяется очень похожим один, который добавляет функции для обработки нажатий кнопок с геймпада к обработке нажатия кнопок оригинального рендера флаттера. Однако это больше не сработает, поскольку первоначальный FlutterView, необходимый для этого, устарел с 1.12 и необходим для получения объектов view и {key|touch}ProcessorField.

val view: FlutterView = registrar.view()

fun viewField(name: String): Field {
   val field = FlutterView::class.java.getDeclaredField(name)
   field.isAccessible = true
   return field
}

// Hack: swap in a new AndroidTouchProcessor.
val touchProcessorField = viewField("androidTouchProcessor")
val rendererField = viewField("flutterRenderer")
val renderer = rendererField.get(view) as FlutterRenderer
val touchProcessor = GamepadAndroidTouchProcessor(renderer)
touchProcessorField.set(view, touchProcessor)

// Hack: swap in a new AndroidKeyProcessor.
val keyProcessorField = viewField("androidKeyProcessor")
val keyEventChannelField = viewField("keyEventChannel")
val textInputPluginField = viewField("mTextInputPlugin")
val keyEventChannel = keyEventChannelField.get(view) as KeyEventChannel
val textInputPlugin = textInputPluginField.get(view) as TextInputPlugin
val keyProcessor = GamepadAndroidKeyProcessor(keyEventChannel, textInputPlugin)
keyProcessorField.set(view, keyProcessor)

Как можно добиться интеграции кнопок геймпада после Флаттер 1.12?

...