Выставлять функции Дарта в javascript

Я немного новичок, чтобы стрелять, и пытаясь намочить ноги, написав в нем некоторые библиотечные функции.

В то время как у меня не было проблем с вызовом javascript-функций из дротика, мне бы хотелось, чтобы я мог вызвать функции дрока из javascript, но до сих пор я не очень люблю.

Например, мне бы хотелось показать некоторые основные функции из дротика, например:

main() {
  String foo() {
    return "bar!";
  }

  js.scoped(() {
    js.context.foo = foo;
  });
}

а затем сможете вызвать их из javascript, например:

<script>
  window.onload = function() {
    alert("foo() = " + foo());
  }
</script>

Возможно ли что-то подобное?

Ответ 1

Нет проблем! см. Вызов Дарта из JavaScript.

В вашем случае:

import 'dart:js' as js;
main() {
  String foo() {
    return "bar!";
  }

  js.context['foo'] = foo;
}

Ответ 2

В Dart 1.20 мне пришлось добавить allowInterop()

import 'dart:js' as js;
main() {
  String foo() {
    return "bar!";
  }

  js.context['foo'] = allowInterop(foo);
}

Ответ 3

В Dart 2.3.0 мне пришлось немного подправить решение, чтобы allowInterop играть хорошо.


    import 'dart:js' as js;
    main() {
      String foo() {
        return "bar!";
      }

      js.context['foo'] = js.allowInterop(foo);
    }