Возврат анонимной функции JS, которая возвращает простой объект javascript из Dart

Дартс код

import 'dart:html' as html;
import 'dart:js' as js;
import 'package:js/js.dart';

void main() {

  var data = new AddLocationData(locationName: "Location1", locationPath: "ThisFolder");
  var func = () => data;
  html.window.console.log(func);
  html.window.console.log(func());
}

@JS("")
@anonymous
class AddLocationData {
  external String get locationName;
  external String get locationPath;
  external factory AddLocationData({String locationName, String locationPath});
}

Вы бы предположили, что func будет функция JS, но это не так. Его тип / имя main_closure, Смотрите скриншот

Скриншот

Итак, первые две строки были напечатаны из кода Dart, затем я использовал окно Chrome Inspect Element и щелкнул правой кнопкой мыши на main_closure' and selected "Store as global variable" which then printedtemp1`, а затем я использовал его для отображения некоторой информации о сгенерированном коде.

Итак, ясно, что Дарт возвратил объект, а не функцию js, и поэтому он задает этот вопрос.

Я хочу temp1 быть функцией вместо temp1.call$0 так что я могу получить данные, позвонив temp1() и не temp1.call$0(),

1 ответ

Решение

Смотрите документацию js package:

Передача функций в JavaScript.

Если вы передаете функцию Dart в JavaScript API, вы должны обернуть ее, используя allowInterop или же allowInteropCaptureThis,

Другие вопросы по тегам