首页 > 解决方案 > 如何将 Swift 本机代码中的参数“放入”Flutter

问题描述

我正在尝试将参数从 Swift 中的回调方法传递给 Flutter。这是我想要在我的本机 Java 代码中实现的示例:

   @Override
        public void onRewardRequest(final TJPlacement tjPlacement, final TJActionRequest tjActionRequest, final String itemId, final int quantity) {
            this.registrar.activity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Map<String, Object> arguments = new HashMap<>();
                    arguments.put("requestId", tjActionRequest.getRequestId());
                    arguments.put("token", tjActionRequest.getToken());
                    arguments.put("itemId", itemId);
                    arguments.put("quantity", quantity);
                    channel.invokeMethod("onRewardRequest", arguments);
                }
            });
        }

编辑:我面临一个问题,参数args未定义,我不确定arguments.put()上面 Java 代码中的 Swift 等价物是什么。这是我目前的实现:

//Calling my method 'onRewardRequest()' from Dart->Swift
 methodChannel.invokeMethod("onRewardRequest", arguments: args, result: {(r:Any?) -> () in

func placement(_ placement: TJPlacement?, didRequestReward request: TJActionRequest?,itemId: String?,quantity: Int) {
       //How do I call `arguments.put` over here like shown above in the Java code?                           
     }
        })

标签: javaiosswiftflutterdart

解决方案


看起来你想从 Swift 调用一个 Dart 方法,传递一个字典的参数(将在 Dart 端变成一个 Map)。创建相关类型的字典,例如:String->Any,填充它并将其用作arguments参数。

  var args = [String: Any]()
  args["itemId"] = itemId
  args["quantity"] = quantity
  // todo - add other arg members
  methodChannel.invokeMethod("onRewardRequest", arguments: args)

推荐阅读