java - 如何将 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?
}
})
解决方案
看起来你想从 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)
推荐阅读
- python - 如何从字节转换为整数?
- android - 如何播放列出的音频并执行 listview.OnItemClickListener?
- html - 如何在离子视图中向 div 标签添加点击/点击功能?
- c# - 无法添加 System.Web.Extensions 程序集作为参考
- php - 根据他们在forloop php中的组名显示数据
- android - sha1 不能与 Auth Phone 一起使用
- ruby-on-rails - 如何对存储在 Rails 5.1 和 PG 的 JSONb 字段中的多个值求和
- unix - Fortran 错误:(1) 处的续行错误
- c - 在 AVL 树 C 中插入和删除
- javascript - 我想在数组中打印数据