Closure call with mismatched arguments: function 'call'

Issue

I’m using the (2.0)js-interop library in combination with the JS library ImageLoaded and I’m stuck the FunctionProxy class because the code below throw the following error:

Breaking on exception: Closure call with mismatched arguments: function ‘call’

js.FunctionProxy loaded = new js.FunctionProxy((){
      print("called");
      js.Proxy pckry = new js.Proxy(context.Packery, container, options);
    });
    
js.Proxy img = new js.Proxy(context.imagesLoaded, container, loaded);

Which is weird because my js callback is called 5 times before the app crashes.

Solution

Looking at the Usage section of imagesLoaded it looks like the callback takes one parameter. So you have to add this parameter to your callback :

js.FunctionProxy loaded = new js.FunctionProxy((instance) {
  print("called");
  js.Proxy pckry = new js.Proxy(context.Packery, container, options);
});

js.Proxy img = new js.Proxy(context.imagesLoaded, container, loaded);

Additional notes :

  • You can avoid new js.FunctionProxy. There are only a limited number of cases where it’s needed and your case here is not one of them.
  • imagesLoaded can be use as a function and it simplifies the code.

Thus, you should be able to use :

final img = context.imagesLoaded(container, (instance) {
  print("called");
  js.Proxy pckry = new js.Proxy(context.Packery, container, options);
});

Answered By – Alexandre Ardhuin

Answer Checked By – Jay B. (FlutterFixes Admin)

Leave a Reply

Your email address will not be published.