Так как это плагин флаттера, я не хочу, чтобы разработчики, зависящие от плагина, в любом случае должны были инициировать плагин. Может быть, им придется, но я бы очень хотел, чтобы они этого не делали.
По сути, мне нужен способ автоматического вызова метода _channel.setMethodCallHandler
при запуске приложения в зависимости от плагина. Без необходимости делать это другим разработчикам, например, вызывая статический метод из класса DragndropPlugin
, чтобы самим «инициализировать» плагин.
Возможно, существует какой-то способ репликации способа, которым это делаетсяна платформе специфической стороне в Java. Вот пример метода, который вызывается, я думаю, как-то по флаттеру всякий раз, когда плагин «загружается»:
public static void registerWith(Registrar registrar) {
DragndropPlugin.methodChannel = new MethodChannel(registrar.messenger(), CHANNEL);
DragndropPlugin.methodChannel.setMethodCallHandler(new DragndropPlugin());
}
В частности, я говорю о методе registerWith
.
Я попробовал следующее, но это не похоже на работу. Не основной вопрос, но я был бы признателен за объяснение того, почему это не сработает. Или, если уж на то пошло, если это сработает, возможно, я допустил возможные ошибки, из-за которых он не сработал.
abstract class DragndropPlugin {
static const MethodChannel _channel =
const MethodChannel(_CHANNEL);
static void _handler = _channel.setMethodCallHandler(DragndropPlugin._onMethodCall);
static Future<dynamic> _onMethodCall(MethodCall call) async {
switch (call.method) {
case "onDrag":
print(call.arguments.toString());
break;
default:
print("An unknown method was invoked on the platform-specific side.");
break;
}
}
}
Мой вопрос в основном о том, как мне поступить в достижении вышеизложенного.
Флаттер 1.9.1 + исправление.6 • стабильный канал • https://github.com/flutter/flutter.git
Framework • ревизия 68587a0916 (6 недель назад) • 2019-09-13 19:46:58 -0700
Двигатель • Редакция b863200c37
Инструменты • Дротик 2.5.0