main.dart 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import 'dart:html';
  2. import 'package:crypto/crypto.dart';
  3. import 'dart:typed_data';
  4. import 'dart:js';
  5. import 'dart:convert';
  6. class OdfWorker{
  7. Worker inner;
  8. void postMessage(message){
  9. this.inner.postMessage(message);
  10. }
  11. void listen(handler){
  12. this.inner.onMessage.listen(handler);
  13. }
  14. OdfWorker(){
  15. this.inner = new Worker("demo3.js");
  16. }
  17. }
  18. void main() {
  19. var w = new OdfWorker();
  20. w.listen((_m){
  21. print(_m.data);
  22. var msg = JSON.decode(_m.data);
  23. switch(msg["Type"]){
  24. case "init":
  25. print("worker initialized, sending responce...");
  26. w.postMessage(JSON.encode({"Type": "init"}));
  27. break;
  28. case "data":
  29. print("data received");
  30. Uint8List data = new Uint8List.fromList(CryptoUtils.base64StringToBytes(msg["Data"]));
  31. context.callMethod("saveAs", [new Blob([data], "application/octet-stream"), "report.odf"]);
  32. break;
  33. default: throw new ArgumentError(msg["Type"]);
  34. }
  35. });
  36. querySelector("#do-demo").onClick.listen((m){
  37. w.postMessage(JSON.encode({"Type": "get", "Param": "demo"}));
  38. });
  39. querySelector("#do-report").onClick.listen((m){
  40. w.postMessage(JSON.encode({"Type": "get", "Param": "report"}));
  41. });
  42. }