Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 218a166

Browse files
committedAug 1, 2024·
migrate to package:web and dart:js_interop
1 parent eecfdba commit 218a166

File tree

4 files changed

+67
-29
lines changed

4 files changed

+67
-29
lines changed
 

‎example/pubspec.lock

+9-1
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,14 @@ packages:
491491
url: "https://pub.dev"
492492
source: hosted
493493
version: "1.1.0"
494+
web:
495+
dependency: transitive
496+
description:
497+
name: web
498+
sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062
499+
url: "https://pub.dev"
500+
source: hosted
501+
version: "1.0.0"
494502
web_socket_channel:
495503
dependency: transitive
496504
description:
@@ -524,5 +532,5 @@ packages:
524532
source: hosted
525533
version: "3.1.1"
526534
sdks:
527-
dart: ">=3.3.0 <4.0.0"
535+
dart: ">=3.4.0 <4.0.0"
528536
flutter: ">=3.18.0-18.0.pre.54"

‎example/web/index.html

+1-11
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,6 @@
3030
<link rel="manifest" href="manifest.json">
3131
</head>
3232
<body>
33-
<!-- This script installs service_worker.js to provide PWA functionality to
34-
application. For more information, see:
35-
https://developers.google.com/web/fundamentals/primers/service-workers -->
36-
<script>
37-
if ('serviceWorker' in navigator) {
38-
window.addEventListener('flutter-first-frame', function () {
39-
navigator.serviceWorker.register('flutter_service_worker.js');
40-
});
41-
}
42-
</script>
43-
<script src="main.dart.js" type="application/javascript"></script>
33+
<script src="flutter_bootstrap.js" async></script>
4434
</body>
4535
</html>

‎lib/web/rsa_web.dart

+55-16
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
11
import 'dart:async';
2-
import 'dart:collection';
3-
import 'dart:html';
2+
import 'dart:js_interop';
43

54
import 'package:flutter/services.dart';
65
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
6+
import 'package:web/web.dart';
77

88
class FastRsaPlugin {
99
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+
);
1113
Map<String, Completer<Uint8List>> completers = {};
1214

1315
static void registerWith(Registrar registrar) {
1416
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+
);
1922
final FastRsaPlugin instance = FastRsaPlugin();
2023
instance.listen();
2124
channel.setMethodCallHandler(instance.handleMethodCall);
@@ -26,27 +29,63 @@ class FastRsaPlugin {
2629
}
2730

2831
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];
3236
if (completer == null) {
3337
return;
3438
}
35-
if (data['error'] != null && data['error'] != "") {
36-
completer.completeError(data['error']);
39+
if (data.error != null && data.error! != '') {
40+
completer.completeError(data.error!);
3741
} else {
38-
completer.complete(data['response']);
42+
completer.complete(data.response?.toDart);
3943
}
40-
completers.remove(data['id']);
41-
});
44+
completers.remove(data.id);
45+
}
46+
47+
worker.onmessage = _onMessage.toJS;
48+
// worker.addEventListener('message', _onMessage.toJS);
4249
}
4350

4451
Future<Uint8List> bridgeCall(String name, Uint8List? /*!*/ request) async {
4552
_counter++;
4653
var id = _counter.toString();
4754
var completer = new Completer<Uint8List>();
4855
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+
));
5061
return completer.future;
5162
}
5263
}
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+
}

‎pubspec.yaml

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ version: 3.6.3
44
homepage: https://github.com/jerson/flutter-rsa
55

66
environment:
7-
sdk: '>=2.17.0 <3.0.0'
7+
sdk: '>=3.3.0 <4.0.0'
88
flutter: ">=1.10.0"
99

1010
false_secrets:
@@ -18,6 +18,7 @@ dependencies:
1818
ffi: ^2.0.1
1919
flat_buffers: ^2.0.5
2020
path: ^1.8.2
21+
web: ">=0.5.0 <2.0.0"
2122

2223
dev_dependencies:
2324
flutter_test:

0 commit comments

Comments
 (0)
Please sign in to comment.