Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a better way to make a method of a Dart class callable from JS with the new js 0.6.0 package?

index.html (head)

<script>
  var callDartMethod = function(dartObject) {
    return dartObject.fullName();
  }
</script>

index.dart

import 'package:js/js.dart';

@Js() // about to being changed to @JS
external String callDartMethod(p);

main() {
  final p = Person.create(firstName: 'Günter', lastName: 'Zöchbauer');
  print(callDartMethod(p)); // indirect call from JS
  // print(p.fullName()); // call from Dart directly
}

@Js() // about to being changed to @JS
class Person {
  external String get firstName;
  external set firstName(String firstName);

  external String get lastName;
  external set lastName(String lastName);

  external Function get fullName;
  external set fullName(Function function);

  external factory Person({String firstName, String lastName});

  static Person create({String firstName, String lastName}) =>
      new Person(firstName: firstName, lastName: lastName)
        // works but feels a bit cumbersome
        ..fullName = allowInteropCaptureThis(fullNameImpl);

  static String fullNameImpl(self) => '${self.firstName} ${self.lastName}';
}
like image 608
Günter Zöchbauer Avatar asked Oct 16 '15 15:10

Günter Zöchbauer


1 Answers

Short answer: no.

pkg/js is currently focused on letting a Dart app consume JavaScript libraries.

We want to make it easier to export APIs written in Dart to JavaScript consumers, but that will come later.

like image 102
Kevin Moore Avatar answered Sep 21 '22 04:09

Kevin Moore