Как лучше всего дать несколько аргументов с помощью java-версии флаттеров MethodChannel.invokeMenthod? - PullRequest
1 голос
/ 02 июля 2019

У меня есть флаттер-проект (плагин), который также использует некоторый нативный код Java. Для связи между дротиком и Java я использую MethodChannel.invokeMethod. Это очень хорошо работает из дротика для Java, и я могу вытащить именованные аргументы с call.argument("name") в Java. Другой способ, однако, вызывает у меня небольшую головную боль, поскольку мне нужно передать переменное число аргументов в dart с помощью вызова моего метода, но invokeMethod принимает только «Object» в качестве аргумента.

Я видел, как он работает только с одним аргументом, например строкой или int, но я не могу найти хороший способ реализовать его для нескольких аргументов.

Я бы ожидал, что существует какой-то тип объекта списка, который я мог бы передать в качестве аргумента для invokeMethod, но я нигде не смог его найти.

Может кто-нибудь из вас подсказать, как лучше всего это сделать?

1 Ответ

0 голосов
/ 02 июля 2019

Вы должны передать Map<String, dynamic> как отдельный объект.(Обратите внимание, что каждая динамика должна быть одним из разрешенных типов данных .) На конце Java это выглядит как HashMap.На стороне Java имеются полезные функции получения для доступа к членам карты хеш-функции.

Dart

  static void foo(String bar, bool baz) {
    _channel.invokeMethod('foo', <String, dynamic>{
      'bar': bar,
      'baz': baz,
    });
  }

Java

  String bar = call.argument("bar"); // .argument returns the correct type
  boolean baz = call.argument("baz"); // for the assignment

Используя этот ответ для полной схемы, вы можете достичь противоположного направления, например:

Java

  static void charlie(String alice, boolean bob) {
    HashMap<String, Object> arguments = new HashMap<>();
    arguments.put("alice", alice);
    arguments.put("bob", bob);
    channel.invokeMethod("charlie", arguments);
  }

Дарт

    String alice = methodCall.arguments['alice'];
    bool bob = methodCall.arguments['bob'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...