我有一个 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/