12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import 'dart:html';
- import 'package:crypto/crypto.dart';
- import 'dart:typed_data';
- import 'dart:js';
- import 'dart:convert';
- class OdfWorker{
- Worker inner;
- void postMessage(message){
- this.inner.postMessage(message);
- }
- void listen(handler){
- this.inner.onMessage.listen(handler);
- }
- OdfWorker(){
- this.inner = new Worker("demo3.js");
- }
- }
- void main() {
- var w = new OdfWorker();
- w.listen((_m){
- print(_m.data);
- var msg = JSON.decode(_m.data);
- switch(msg["Type"]){
- case "init":
- print("worker initialized, sending responce...");
- w.postMessage(JSON.encode({"Type": "init"}));
- break;
- case "data":
- print("data received");
- Uint8List data = new Uint8List.fromList(CryptoUtils.base64StringToBytes(msg["Data"]));
- context.callMethod("saveAs", [new Blob([data], "application/octet-stream"), "report.odf"]);
- break;
- default: throw new ArgumentError(msg["Type"]);
- }
- });
- querySelector("#do-demo").onClick.listen((m){
- w.postMessage(JSON.encode({"Type": "get", "Param": "demo"}));
- });
- querySelector("#do-report").onClick.listen((m){
- w.postMessage(JSON.encode({"Type": "get", "Param": "report"}));
- });
- }
|