一尘不染

我如何最好地使用flutters的Java版本MethodChannel.invokeMenthod给出多个参数?

flutter

我有一个flutter项目(插件),它也使用一些本机Java代码。要在dart和Java之间进行通信,请使用MethodChannel.invokeMethod。从dart
for
Java上这可以很好地工作,我可以call.argument("name")在java中提取命名参数。但是,另一种方法让我有些头疼,因为我需要通过方法调用将可变数量的参数传递给dart,但是invokeMethod仅将“
Object”作为参数。

我已经看到它仅适用于单个参数(例如字符串或整数),但是我似乎找不到找到针对多个参数实现它的好方法。

我本来希望可以将某种列表对象类型作为invokeMethod的参数传递,但是我无法在任何地方找到它。

你们中的任何一个都可以暗示如何做到最好吗?


阅读 542

收藏
2020-08-13

共1个答案

一尘不染

您必须将a Map<String, dynamic>作为单个对象传递。(请注意,每个动态必须是允许的数据类型之一。)这在Java端显示为HashMap。Java端有一些有用的getter函数来访问哈希映射成员。

Darts

  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

使用此[答案](http://codingdict.com/questions/97093获得完整轮廓,您可以实现相反的方向,例如:

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);
  }

Darts

    String alice = methodCall.arguments['alice'];
    bool bob = methodCall.arguments['bob'];
2020-08-13