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

kim*_*san 6 java flutter

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

我已经看到它只适用于单个参数,如字符串或整数,但我似乎无法找到一种为多个参数实现它的好方法。

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

你们中的任何人都可以提供有关如何最好地做到这一点的提示吗?

Ric*_*eap 12

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

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

爪哇

  String bar = call.argument("bar"); // .argument returns the correct type
  boolean baz = call.argument("baz"); // for the assignment
Run Code Online (Sandbox Code Playgroud)

将此答案用于完整大纲,您可以实现相反的方向,例如:

爪哇

  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);
  }
Run Code Online (Sandbox Code Playgroud)

    String alice = methodCall.arguments['alice'];
    bool bob = methodCall.arguments['bob'];
Run Code Online (Sandbox Code Playgroud)

  • 发送给 dart 的 java 消息应该是 `result.success(arguments);` (2认同)