diff --git a/packages/shared_preferences/shared_preferences_web/CHANGELOG.md b/packages/shared_preferences/shared_preferences_web/CHANGELOG.md index 747f25adc43f..5f5d8c246cd6 100644 --- a/packages/shared_preferences/shared_preferences_web/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_web/CHANGELOG.md @@ -1,6 +1,6 @@ -## NEXT +## 2.2.2 -* Updates minimum supported SDK version to Flutter 3.10/Dart 3.0. +* Updates minimum supported SDK version to Dart 3.2. ## 2.2.1 diff --git a/packages/shared_preferences/shared_preferences_web/example/integration_test/shared_preferences_web_test.dart b/packages/shared_preferences/shared_preferences_web/example/integration_test/shared_preferences_web_test.dart index 53a47db784b1..b5f905bc966e 100644 --- a/packages/shared_preferences/shared_preferences_web/example/integration_test/shared_preferences_web_test.dart +++ b/packages/shared_preferences/shared_preferences_web/example/integration_test/shared_preferences_web_test.dart @@ -2,14 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:html' as html; - import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; import 'package:shared_preferences_platform_interface/method_channel_shared_preferences.dart'; import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart'; import 'package:shared_preferences_platform_interface/types.dart'; import 'package:shared_preferences_web/shared_preferences_web.dart'; +import 'package:shared_preferences_web/src/keys_extension.dart'; + +import 'package:web/helpers.dart' as html; const Map kTestValues = { 'flutter.String': 'hello world', @@ -114,6 +115,15 @@ void main() { allTestValues['flutter.StringList']!); } + testWidgets('keys', (WidgetTester _) async { + await addData(); + final Iterable keys = html.window.localStorage.keys; + final Iterable expectedKeys = allTestValues.keys; + + expect(keys, hasLength(expectedKeys.length)); + expect(keys, containsAll(expectedKeys)); + }); + testWidgets('clear', (WidgetTester _) async { await addData(); await preferences.clear(); diff --git a/packages/shared_preferences/shared_preferences_web/example/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/example/pubspec.yaml index 826b38ba2a00..bf6ca2a883df 100644 --- a/packages/shared_preferences/shared_preferences_web/example/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_web/example/pubspec.yaml @@ -2,8 +2,8 @@ name: shared_preferences_web_integration_tests publish_to: none environment: - sdk: ">=3.0.0 <4.0.0" - flutter: ">=3.10.0" + sdk: ">=3.2.0 <4.0.0" + flutter: ">=3.16.0" dependencies: flutter: @@ -11,6 +11,7 @@ dependencies: shared_preferences_platform_interface: ^2.3.0 shared_preferences_web: path: ../ + web: '>=0.3.0 <0.5.0' dev_dependencies: flutter_test: diff --git a/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart b/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart index 34c33ce82cfd..b83c1a5fe37e 100644 --- a/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart +++ b/packages/shared_preferences/shared_preferences_web/lib/shared_preferences_web.dart @@ -4,11 +4,13 @@ import 'dart:async'; import 'dart:convert' show json; -import 'dart:html' as html; import 'package:flutter_web_plugins/flutter_web_plugins.dart'; import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart'; import 'package:shared_preferences_platform_interface/types.dart'; +import 'package:web/web.dart' as html; + +import 'src/keys_extension.dart'; /// The web implementation of [SharedPreferencesStorePlatform]. /// @@ -43,7 +45,7 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { // remove _all_ local data, not just the keys prefixed with // _prefix _getFilteredKeys(filter.prefix, allowList: filter.allowList) - .forEach(html.window.localStorage.remove); + .forEach(remove); return true; } @@ -69,20 +71,20 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { final Map allData = {}; for (final String key in _getFilteredKeys(filter.prefix, allowList: filter.allowList)) { - allData[key] = _decodeValue(html.window.localStorage[key]!); + allData[key] = _decodeValue(html.window.localStorage.getItem(key)!); } return allData; } @override Future remove(String key) async { - html.window.localStorage.remove(key); + html.window.localStorage.removeItem(key); return true; } @override Future setValue(String valueType, String key, Object? value) async { - html.window.localStorage[key] = _encodeValue(value); + html.window.localStorage.setItem(key, _encodeValue(value)); return true; } diff --git a/packages/shared_preferences/shared_preferences_web/lib/src/keys_extension.dart b/packages/shared_preferences/shared_preferences_web/lib/src/keys_extension.dart new file mode 100644 index 000000000000..373ee9660f88 --- /dev/null +++ b/packages/shared_preferences/shared_preferences_web/lib/src/keys_extension.dart @@ -0,0 +1,13 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:web/web.dart' as html; + +/// An extension on [html.Storage] that adds a convenience [keys] getter. +extension KeysExtension on html.Storage { + /// Gets all the [keys] set in this [html.Storage]. + List get keys { + return [for (int i = 0; i < length; i++) key(i)!]; + } +} diff --git a/packages/shared_preferences/shared_preferences_web/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/pubspec.yaml index 2a64a80e09c6..ceb1dfebcf7a 100644 --- a/packages/shared_preferences/shared_preferences_web/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_web/pubspec.yaml @@ -2,11 +2,11 @@ name: shared_preferences_web description: Web platform implementation of shared_preferences repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22 -version: 2.2.1 +version: 2.2.2 environment: - sdk: ">=3.0.0 <4.0.0" - flutter: ">=3.10.0" + sdk: ">=3.2.0 <4.0.0" + flutter: ">=3.16.0" flutter: plugin: @@ -22,6 +22,7 @@ dependencies: flutter_web_plugins: sdk: flutter shared_preferences_platform_interface: ^2.3.0 + web: '>=0.3.0 <0.5.0' dev_dependencies: flutter_test: