1
1
import 'dart:async' ;
2
- import 'dart:collection' ;
3
- import 'dart:html' ;
2
+ import 'dart:js_interop' ;
4
3
5
4
import 'package:flutter/services.dart' ;
6
5
import 'package:flutter_web_plugins/flutter_web_plugins.dart' ;
6
+ import 'package:web/web.dart' ;
7
7
8
8
class FastRsaPlugin {
9
9
var _counter = 0 ;
10
- Worker worker = new Worker ('assets/packages/fast_rsa/web/assets/worker.js' );
10
+ Worker worker = Worker (
11
+ 'assets/packages/fast_rsa/web/assets/worker.js' .toJS,
12
+ );
11
13
Map <String , Completer <Uint8List >> completers = {};
12
14
13
15
static void registerWith (Registrar registrar) {
14
16
final MethodChannel channel = MethodChannel (
15
- 'fast_rsa' ,
16
- const StandardMethodCodec (),
17
- // ignore: deprecated_member_use
18
- registrar.messenger);
17
+ 'fast_rsa' ,
18
+ const StandardMethodCodec (),
19
+ // ignore: deprecated_member_use
20
+ registrar.messenger,
21
+ );
19
22
final FastRsaPlugin instance = FastRsaPlugin ();
20
23
instance.listen ();
21
24
channel.setMethodCallHandler (instance.handleMethodCall);
@@ -26,27 +29,63 @@ class FastRsaPlugin {
26
29
}
27
30
28
31
void listen () async {
29
- worker.onMessage.listen ((event) {
30
- LinkedHashMap <dynamic , dynamic > data = event.data;
31
- var completer = completers[data['id' ]];
32
+ void _onMessage (Event event) {
33
+ final msgEvent = event as MessageEvent ;
34
+ final data = msgEvent.data as RsaResponse ;
35
+ var completer = completers[data.id];
32
36
if (completer == null ) {
33
37
return ;
34
38
}
35
- if (data[ ' error' ] != null && data[ ' error' ] != "" ) {
36
- completer.completeError (data[ ' error' ] );
39
+ if (data. error != null && data. error! != '' ) {
40
+ completer.completeError (data. error! );
37
41
} else {
38
- completer.complete (data[ ' response' ] );
42
+ completer.complete (data. response? .toDart );
39
43
}
40
- completers.remove (data['id' ]);
41
- });
44
+ completers.remove (data.id);
45
+ }
46
+
47
+ worker.onmessage = _onMessage.toJS;
48
+ // worker.addEventListener('message', _onMessage.toJS);
42
49
}
43
50
44
51
Future <Uint8List > bridgeCall (String name, Uint8List ? /*!*/ request) async {
45
52
_counter++ ;
46
53
var id = _counter.toString ();
47
54
var completer = new Completer <Uint8List >();
48
55
completers[id] = completer;
49
- worker.postMessage ({'id' : id, 'name' : name, 'request' : request});
56
+ worker.postMessage (RsaRequest (
57
+ id: id,
58
+ name: name,
59
+ request: request? .toJS,
60
+ ));
50
61
return completer.future;
51
62
}
52
63
}
64
+
65
+ @JS ()
66
+ @anonymous
67
+ extension type RsaRequest ._(JSObject _) implements JSObject {
68
+ external String id;
69
+ external String name;
70
+ external JSUint8Array ? request;
71
+
72
+ external RsaRequest ({
73
+ String id,
74
+ String name,
75
+ JSUint8Array ? request,
76
+ });
77
+ }
78
+
79
+ @JS ()
80
+ @anonymous
81
+ extension type RsaResponse ._(JSObject _) implements JSObject {
82
+ external String id;
83
+ external String ? error;
84
+ external JSUint8Array ? response;
85
+
86
+ external RsaResponse ({
87
+ String id,
88
+ String ? error,
89
+ JSUint8Array ? response,
90
+ });
91
+ }
0 commit comments