С использованием функции addChangeListener() Blockly из Dart (js interop)

Я написал некоторый код-обертку для доступа к Blockly API из Dart, используя dart:js. Все идет гладко, пока мне не нужно передать функцию одной из функций регистрации событий Blockly на стороне JS.

Рассматриваемая функция в Blockly addChangeListener() (см. https://developers.google.com/blockly/installation/code-generators). Она принимает функцию 0-arg в качестве обратного вызова. Поэтому моя цель - обернуть функцию Dart, передать ее и вызвать эту функцию при возникновении события.

В дартс:

var blockly = context['Blockly'];

context['codeChangedCallback'] = (){
   print('This should work, right?');
};  

blockly.callMethod('addChangeListener', [context['codeChangedCallback']]);

Когда Blockly инициализируется, я получаю следующую трассировку стека:

снимок экрана

Я надеюсь, что кто-то может указать на что-то очевидное, что я пропустил.

У меня есть ощущение, что это может быть связано именно с тем, как blockly обрабатывает функцию внутри, потому что я пытался передать функцию за пределами blockly, и она работала нормально.

2 ответа

Проблема в том, что обратный вызов addChangeListener() имеет арность единицу, а Дарт заботится о арности. Ваш звонок должен выглядеть так:

var blockly = context['Blockly'];

blockly.callMethod('addChangeListener', [(var event) => print('Success!')]);

Я думаю, что это должно работать

var blockly = context['Blockly'];

context['codeChangedCallback'] = (){
   print('This should work, right?');
};  

blockly.callMethod('addChangeListener', [(){
   print('This should work, right?');
}]);
Другие вопросы по тегам