Skip to content

Commit b331a50

Browse files
committed
refactor: Migrate to js interop
1 parent 859975f commit b331a50

File tree

9 files changed

+195
-46
lines changed

9 files changed

+195
-46
lines changed

.dart_tool/package_config.json

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,76 @@
11
{
22
"configVersion": 2,
33
"packages": [
4+
{
5+
"name": "args",
6+
"rootUri": "file:///Users/christianpauly/.pub-cache/hosted/pub.dev/args-2.7.0",
7+
"packageUri": "lib/",
8+
"languageVersion": "3.3"
9+
},
10+
{
11+
"name": "collection",
12+
"rootUri": "file:///Users/christianpauly/.pub-cache/hosted/pub.dev/collection-1.19.1",
13+
"packageUri": "lib/",
14+
"languageVersion": "3.4"
15+
},
16+
{
17+
"name": "import_sorter",
18+
"rootUri": "file:///Users/christianpauly/.pub-cache/hosted/pub.dev/import_sorter-4.6.0",
19+
"packageUri": "lib/",
20+
"languageVersion": "2.12"
21+
},
22+
{
23+
"name": "path",
24+
"rootUri": "file:///Users/christianpauly/.pub-cache/hosted/pub.dev/path-1.9.1",
25+
"packageUri": "lib/",
26+
"languageVersion": "3.4"
27+
},
28+
{
29+
"name": "source_span",
30+
"rootUri": "file:///Users/christianpauly/.pub-cache/hosted/pub.dev/source_span-1.10.1",
31+
"packageUri": "lib/",
32+
"languageVersion": "3.1"
33+
},
34+
{
35+
"name": "string_scanner",
36+
"rootUri": "file:///Users/christianpauly/.pub-cache/hosted/pub.dev/string_scanner-1.4.1",
37+
"packageUri": "lib/",
38+
"languageVersion": "3.1"
39+
},
40+
{
41+
"name": "term_glyph",
42+
"rootUri": "file:///Users/christianpauly/.pub-cache/hosted/pub.dev/term_glyph-1.2.2",
43+
"packageUri": "lib/",
44+
"languageVersion": "3.1"
45+
},
46+
{
47+
"name": "tint",
48+
"rootUri": "file:///Users/christianpauly/.pub-cache/hosted/pub.dev/tint-2.0.1",
49+
"packageUri": "lib/",
50+
"languageVersion": "2.18"
51+
},
52+
{
53+
"name": "web",
54+
"rootUri": "file:///Users/christianpauly/.pub-cache/hosted/pub.dev/web-1.1.1",
55+
"packageUri": "lib/",
56+
"languageVersion": "3.4"
57+
},
58+
{
59+
"name": "yaml",
60+
"rootUri": "file:///Users/christianpauly/.pub-cache/hosted/pub.dev/yaml-3.1.3",
61+
"packageUri": "lib/",
62+
"languageVersion": "3.4"
63+
},
464
{
565
"name": "web_multiple_tab_detector",
666
"rootUri": "../",
767
"packageUri": "lib/",
868
"languageVersion": "2.12"
969
}
1070
],
11-
"generated": "2022-02-16T08:12:09.964550Z",
1271
"generator": "pub",
13-
"generatorVersion": "2.16.1"
72+
"generatorVersion": "3.10.4",
73+
"flutterRoot": "file:///Users/christianpauly/develop/flutter",
74+
"flutterVersion": "3.38.5",
75+
"pubCache": "file:///Users/christianpauly/.pub-cache"
1476
}

.dart_tool/package_graph.json

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
{
2+
"roots": [
3+
"web_multiple_tab_detector"
4+
],
5+
"packages": [
6+
{
7+
"name": "web_multiple_tab_detector",
8+
"version": "0.3.0",
9+
"dependencies": [
10+
"web"
11+
],
12+
"devDependencies": [
13+
"import_sorter"
14+
]
15+
},
16+
{
17+
"name": "import_sorter",
18+
"version": "4.6.0",
19+
"dependencies": [
20+
"args",
21+
"tint",
22+
"yaml"
23+
]
24+
},
25+
{
26+
"name": "web",
27+
"version": "1.1.1",
28+
"dependencies": []
29+
},
30+
{
31+
"name": "tint",
32+
"version": "2.0.1",
33+
"dependencies": []
34+
},
35+
{
36+
"name": "yaml",
37+
"version": "3.1.3",
38+
"dependencies": [
39+
"collection",
40+
"source_span",
41+
"string_scanner"
42+
]
43+
},
44+
{
45+
"name": "string_scanner",
46+
"version": "1.4.1",
47+
"dependencies": [
48+
"source_span"
49+
]
50+
},
51+
{
52+
"name": "source_span",
53+
"version": "1.10.1",
54+
"dependencies": [
55+
"collection",
56+
"path",
57+
"term_glyph"
58+
]
59+
},
60+
{
61+
"name": "term_glyph",
62+
"version": "1.2.2",
63+
"dependencies": []
64+
},
65+
{
66+
"name": "path",
67+
"version": "1.9.1",
68+
"dependencies": []
69+
},
70+
{
71+
"name": "collection",
72+
"version": "1.19.1",
73+
"dependencies": []
74+
},
75+
{
76+
"name": "args",
77+
"version": "2.7.0",
78+
"dependencies": []
79+
}
80+
],
81+
"configVersion": 1
82+
}
1.22 MB
Binary file not shown.

.github/workflows/integrate.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: Continious Integration
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
merge_group:
9+
10+
concurrency:
11+
group: ${{ github.ref }}
12+
cancel-in-progress: true
13+
14+
jobs:
15+
dart:
16+
permissions:
17+
contents: read
18+
uses: famedly/frontend-ci-templates/.github/workflows/dart.yml@main
19+
with:
20+
env_file: ".github/workflows/versions.env"
21+
secrets:
22+
ssh_key: "${{ secrets.CI_SSH_PRIVATE_KEY }}"
23+
24+
general:
25+
permissions:
26+
contents: read
27+
uses: famedly/frontend-ci-templates/.github/workflows/general.yml@main

.github/workflows/main.yml

Lines changed: 0 additions & 18 deletions
This file was deleted.

.github/workflows/versions.env

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
dart_version=3.10.4

.gitlab-ci.yml

Lines changed: 0 additions & 15 deletions
This file was deleted.

lib/src/web.dart

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616
* along with this program. If not, see <https://www.gnu.org/licenses/>.
1717
*/
1818

19-
import 'dart:html';
19+
import 'dart:js_interop';
2020
import 'dart:math';
2121

22+
import 'package:web/web.dart' as web;
23+
2224
String randomString([int length = 50]) {
2325
var result = '';
2426
final chars = 'abcdefghijklmnopqrstuvwxyz-_1234567890=';
@@ -32,15 +34,15 @@ String randomString([int length = 50]) {
3234

3335
int getTabs(String name) {
3436
try {
35-
final n = int.parse(window.localStorage[name]!);
37+
final n = int.parse(web.window.localStorage.getItem(name)!);
3638
return n < 0 ? 0 : n;
3739
} catch (_) {
3840
return 0;
3941
}
4042
}
4143

4244
void setTabs(String name, int number) {
43-
window.localStorage[name] = number.toString();
45+
web.window.localStorage.setItem(name, number.toString());
4446
}
4547

4648
bool _pongReceived = false;
@@ -50,22 +52,26 @@ void register(String name) {
5052
_instanceId = randomString();
5153
setTabs(name, getTabs(name) + 1);
5254

53-
window.onUnload.listen((_) {
55+
void onunloadCallback(web.Event event) {
5456
setTabs(name, getTabs(name) - 1);
55-
});
57+
}
58+
59+
web.window.onunload = onunloadCallback.toJS;
5660

57-
window.onStorage.listen((evt) {
61+
void onStorageCallback(web.StorageEvent evt) {
5862
if (evt.key == '$name-ping') {
5963
final val = evt.newValue!;
6064
if (val.split('|')[0] != _instanceId) {
61-
window.localStorage['$name-pong'] =
62-
_instanceId + '|' + DateTime.now().toString();
65+
web.window.localStorage.setItem(
66+
'$name-pong', _instanceId + '|' + DateTime.now().toString());
6367
}
6468
}
6569
if (evt.key == '$name-pong') {
6670
_pongReceived = true;
6771
}
68-
});
72+
}
73+
74+
web.window.onstorage = onStorageCallback.toJS;
6975
}
7076

7177
Future<bool> isSingleTab(String name) async {
@@ -74,8 +80,8 @@ Future<bool> isSingleTab(String name) async {
7480
return true;
7581
}
7682
// send ping to other tabs
77-
window.localStorage['$name-ping'] =
78-
_instanceId + '|' + DateTime.now().toString();
83+
web.window.localStorage
84+
.setItem('$name-ping', _instanceId + '|' + DateTime.now().toString());
7985
int counter = 100;
8086
while (!_pongReceived && counter > 0) {
8187
await Future.delayed(Duration(milliseconds: 50));

pubspec.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,7 @@ repository: https://gitlab.com/famedly/libraries/web_multiple_tab_detector
66

77
environment:
88
sdk: ">=2.12.0 <3.0.0"
9+
dependencies:
10+
web: ^1.1.1
11+
dev_dependencies:
12+
import_sorter: ^4.6.0

0 commit comments

Comments
 (0)