How to 'put' arguments from Swift native code to Flutter

987

It looks like you want to call a Dart method from Swift, passing an argument of a dictionary (will become a Map at the Dart end). Create a dictionary of the relevant type, for example: String->Any, populate it and use that as the arguments parameter.

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

Arnav

Flutter developer

Updated on December 20, 2022

Comments

  • Arnav
    Arnav over 1 year

    I am trying to pass arguments from a callback method in Swift to Flutter. This is an example of what I want to achieve, in my native Java code:

       @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);
                    }
                });
            }
    

    Edit: I am facing an issue, the argument args is undefined and I'm unsure what is the Swift equivalent of arguments.put() from the Java code above. This is my current implementation:

    //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?                           
         }
            })