Skip to content

Commit deddb2c

Browse files
authored
[shared_preferences_web] migrate to pkg:web (flutter#5414)
This allows this package to be used in a web app compiled to Wasm. Helps unblock flutter/devtools#6606
1 parent 639c5f0 commit deddb2c

File tree

6 files changed

+41
-14
lines changed

6 files changed

+41
-14
lines changed

packages/shared_preferences/shared_preferences_web/CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
## NEXT
1+
## 2.2.2
22

3-
* Updates minimum supported SDK version to Flutter 3.10/Dart 3.0.
3+
* Updates minimum supported SDK version to Dart 3.2.
44

55
## 2.2.1
66

packages/shared_preferences/shared_preferences_web/example/integration_test/shared_preferences_web_test.dart

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
import 'dart:html' as html;
6-
75
import 'package:flutter_test/flutter_test.dart';
86
import 'package:integration_test/integration_test.dart';
97
import 'package:shared_preferences_platform_interface/method_channel_shared_preferences.dart';
108
import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart';
119
import 'package:shared_preferences_platform_interface/types.dart';
1210
import 'package:shared_preferences_web/shared_preferences_web.dart';
11+
import 'package:shared_preferences_web/src/keys_extension.dart';
12+
13+
import 'package:web/helpers.dart' as html;
1314

1415
const Map<String, dynamic> kTestValues = <String, dynamic>{
1516
'flutter.String': 'hello world',
@@ -114,6 +115,15 @@ void main() {
114115
allTestValues['flutter.StringList']!);
115116
}
116117

118+
testWidgets('keys', (WidgetTester _) async {
119+
await addData();
120+
final Iterable<String> keys = html.window.localStorage.keys;
121+
final Iterable<String> expectedKeys = allTestValues.keys;
122+
123+
expect(keys, hasLength(expectedKeys.length));
124+
expect(keys, containsAll(expectedKeys));
125+
});
126+
117127
testWidgets('clear', (WidgetTester _) async {
118128
await addData();
119129
await preferences.clear();

packages/shared_preferences/shared_preferences_web/example/pubspec.yaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@ name: shared_preferences_web_integration_tests
22
publish_to: none
33

44
environment:
5-
sdk: ">=3.0.0 <4.0.0"
6-
flutter: ">=3.10.0"
5+
sdk: ">=3.2.0 <4.0.0"
6+
flutter: ">=3.16.0"
77

88
dependencies:
99
flutter:
1010
sdk: flutter
1111
shared_preferences_platform_interface: ^2.3.0
1212
shared_preferences_web:
1313
path: ../
14+
web: '>=0.3.0 <0.5.0'
1415

1516
dev_dependencies:
1617
flutter_test:

packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44

55
import 'dart:async';
66
import 'dart:convert' show json;
7-
import 'dart:html' as html;
87

98
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
109
import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart';
1110
import 'package:shared_preferences_platform_interface/types.dart';
11+
import 'package:web/web.dart' as html;
12+
13+
import 'src/keys_extension.dart';
1214

1315
/// The web implementation of [SharedPreferencesStorePlatform].
1416
///
@@ -43,7 +45,7 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform {
4345
// remove _all_ local data, not just the keys prefixed with
4446
// _prefix
4547
_getFilteredKeys(filter.prefix, allowList: filter.allowList)
46-
.forEach(html.window.localStorage.remove);
48+
.forEach(remove);
4749
return true;
4850
}
4951

@@ -69,20 +71,20 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform {
6971
final Map<String, Object> allData = <String, Object>{};
7072
for (final String key
7173
in _getFilteredKeys(filter.prefix, allowList: filter.allowList)) {
72-
allData[key] = _decodeValue(html.window.localStorage[key]!);
74+
allData[key] = _decodeValue(html.window.localStorage.getItem(key)!);
7375
}
7476
return allData;
7577
}
7678

7779
@override
7880
Future<bool> remove(String key) async {
79-
html.window.localStorage.remove(key);
81+
html.window.localStorage.removeItem(key);
8082
return true;
8183
}
8284

8385
@override
8486
Future<bool> setValue(String valueType, String key, Object? value) async {
85-
html.window.localStorage[key] = _encodeValue(value);
87+
html.window.localStorage.setItem(key, _encodeValue(value));
8688
return true;
8789
}
8890

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'package:web/web.dart' as html;
6+
7+
/// An extension on [html.Storage] that adds a convenience [keys] getter.
8+
extension KeysExtension on html.Storage {
9+
/// Gets all the [keys] set in this [html.Storage].
10+
List<String> get keys {
11+
return <String>[for (int i = 0; i < length; i++) key(i)!];
12+
}
13+
}

packages/shared_preferences/shared_preferences_web/pubspec.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ name: shared_preferences_web
22
description: Web platform implementation of shared_preferences
33
repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences_web
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22
5-
version: 2.2.1
5+
version: 2.2.2
66

77
environment:
8-
sdk: ">=3.0.0 <4.0.0"
9-
flutter: ">=3.10.0"
8+
sdk: ">=3.2.0 <4.0.0"
9+
flutter: ">=3.16.0"
1010

1111
flutter:
1212
plugin:
@@ -22,6 +22,7 @@ dependencies:
2222
flutter_web_plugins:
2323
sdk: flutter
2424
shared_preferences_platform_interface: ^2.3.0
25+
web: '>=0.3.0 <0.5.0'
2526

2627
dev_dependencies:
2728
flutter_test:

0 commit comments

Comments
 (0)