gpt4 book ai didi

java - 我如何最好地使用 flutter MethodChannel.invokeMethod 的 java 版本提供多个参数?

转载 作者:IT王子 更新时间:2023-10-29 06:56:21 28 4
gpt4 key购买 nike

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

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

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

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

最佳答案

你必须传递一个 Map<String, dynamic>作为单一对象。 (请注意,每个动态必须是 allowed data types 之一。)这在 Java 端显示为 HashMap。 . Java 端有有用的 getter 函数来访问 HashMap 成员。

飞镖

  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

使用这个 answer对于完整的轮廓,您可以实现相反的方向,例如:

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'];

关于java - 我如何最好地使用 flutter MethodChannel.invokeMethod 的 java 版本提供多个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56852851/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com