dartはJavaScriptにもコンパイルできます。

JavaScriptから関数を呼び出すのは少々面倒なのですが、Dartで作った関数を使ったJSアプリなんかを作ることも出来ます。

今は未だラインナップが弱いpubですが、素晴らしいものもあり、今回はqrを使用しています。

なので、下記サンプルにはpubspec.yamlに下記が必要です。

dependencies:
  qr: ^1.2.0
  js: ^0.6.1+1

概要

JavaScript側に、makeSetQRという関数を用意しておいて、Dartから関数を露出させます。

var makeQR = function() {
    return "UNLOADED YET";
};
function makeSetQR(func) {
    makeQR = func;
}

Dartがこちら。

import 'package:qr/qr.dart';
import 'package:js/js.dart';

@JS()
external makeSetQR(Function f);

main() {
  makeSetQR(allowInterop((int size,String f) {
    return QRImage(size,f);
  }));
}

String QRImage(int size,String source) {
  final qrCode = new QrCode(size, QrErrorCorrectLevel.L);
  qrCode.addData(source);
  qrCode.make();
  var result = "";
  for (int x = 0; x < qrCode.moduleCount; x++) {
    for (int y = 0; y < qrCode.moduleCount; y++) {
      if (qrCode.isDark(y, x)) {
        result += "1";
        // render a dark square on the canvas
      } else {
        result += "0";
      }
    }
    result += "\n";
  }
  return result;
}

動くサンプル