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

标签 java flutter

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

相关文章:

java - 关于数组异常

java processbuilder Windows 命令通配符

java - 从java程序运行git命令的问题

flutter - CORS flutter 网

c++ - Flutter中的C++脚本生成器和评估器

java - Maven - 使用 JDK 7 为 JVM 5 编译

flutter - 我在摄像头屏幕选项卡上时想隐藏应用程序栏和底部导航栏

Flutter easy_localization 和 intl 版本解决失败

flutter - 如何向 `showSearch` 提供 BLoC(带有 flutter_bloc)

java - Gson反序列化json,其中包含可以是字符串或对象的参数