为了账号安全,请及时绑定邮箱和手机立即绑定

我如何最好地使用 flutters MethodChannel.invokeMenthod

我如何最好地使用 flutters MethodChannel.invokeMenthod

慕田峪4524236 2023-03-02 15:11:13
我有一个 flutter 项目(插件),它也使用一些本机 java 代码。为了在 dart 和 java 之间进行通信,我使用MethodChannel.invokeMethod. 这在 dart for java 中非常有效,我可以在 java 中提取命名参数call.argument("name")。然而,另一种方法让我有点头疼,因为我需要通过我的方法调用将可变数量的参数传递给 dart,但 invokeMethod 仅将“”作为参数Object。我已经看到它只适用于单个参数,如字符串或 int,但我似乎找不到为多个参数实现它的好方法。我本以为有某种列表对象类型可以作为 invokeMethod 的参数传递,但我无法在任何地方找到它。你们中的任何人都可以提示如何最好地做到这一点吗?
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

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



  static void foo(String bar, bool baz) {

    _channel.invokeMethod('foo', <String, dynamic>{

      'bar': bar,

      'baz': baz,

    });

  }

爪哇


  String bar = call.argument("bar"); // .argument returns the correct type

  boolean baz = call.argument("baz"); // for the assignment

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


爪哇


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


查看完整回答
反对 回复 2023-03-02
  • 1 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信