From e7943f0a27cff0b754ef7ca724308dd9868dc924 Mon Sep 17 00:00:00 2001 From: jhd0 Date: Thu, 20 Jul 2023 11:27:33 +0900 Subject: [PATCH 1/6] Update to support shared_preference 2.2.0 --- packages/shared_preferences/CHANGELOG.md | 5 +- packages/shared_preferences/README.md | 4 +- .../shared_preferences_test.dart | 104 ++++++++++++++---- .../shared_preferences/example/pubspec.yaml | 2 +- .../lib/shared_preferences_tizen.dart | 26 +++++ packages/shared_preferences/pubspec.yaml | 2 +- 6 files changed, 118 insertions(+), 25 deletions(-) diff --git a/packages/shared_preferences/CHANGELOG.md b/packages/shared_preferences/CHANGELOG.md index 0a38bd785..ca132cdfc 100644 --- a/packages/shared_preferences/CHANGELOG.md +++ b/packages/shared_preferences/CHANGELOG.md @@ -1,6 +1,9 @@ -## NEXT +## 2.1.1 * Increase the minimum Flutter version to 3.3. +* Update shared_preferences to 2.2.0. +* Update shared_preferences_interface to 2.3.0. +* Update integration_test. ## 2.1.0 diff --git a/packages/shared_preferences/README.md b/packages/shared_preferences/README.md index 56f799a2f..646c6b9a2 100644 --- a/packages/shared_preferences/README.md +++ b/packages/shared_preferences/README.md @@ -10,8 +10,8 @@ This package is not an _endorsed_ implementation of `shared_preferences`. Theref ```yaml dependencies: - shared_preferences: ^2.0.9 - shared_preferences_tizen: ^2.1.0 + shared_preferences: ^2.2.0 + shared_preferences_tizen: ^2.1.1 ``` Then you can import `shared_preferences` in your Dart code: diff --git a/packages/shared_preferences/example/integration_test/shared_preferences_test.dart b/packages/shared_preferences/example/integration_test/shared_preferences_test.dart index 7244efe99..443ac6fc4 100644 --- a/packages/shared_preferences/example/integration_test/shared_preferences_test.dart +++ b/packages/shared_preferences/example/integration_test/shared_preferences_test.dart @@ -9,29 +9,21 @@ import 'package:shared_preferences/shared_preferences.dart'; void main() { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - group('$SharedPreferences', () { - const String testString = 'hello world'; - const bool testBool = true; - const int testInt = 42; - const double testDouble = 3.14159; - const List testList = ['foo', 'bar']; + const String testString = 'hello world'; + const bool testBool = true; + const int testInt = 42; + const double testDouble = 3.14159; + const List testList = ['foo', 'bar']; - const String testString2 = 'goodbye world'; - const bool testBool2 = false; - const int testInt2 = 1337; - const double testDouble2 = 2.71828; - const List testList2 = ['baz', 'quox']; + const String testString2 = 'goodbye world'; + const bool testBool2 = false; + const int testInt2 = 1337; + const double testDouble2 = 2.71828; + const List testList2 = ['baz', 'quox']; - late SharedPreferences preferences; - - setUp(() async { - preferences = await SharedPreferences.getInstance(); - }); - - tearDown(() { - preferences.clear(); - }); + late SharedPreferences preferences; + void runAllTests() { testWidgets('reading', (WidgetTester _) async { expect(preferences.get('String'), isNull); expect(preferences.get('bool'), isNull); @@ -97,5 +89,77 @@ void main() { // The last write should win. expect(preferences.getInt('int'), writeCount); }); + } + + group('SharedPreferences', () { + setUp(() async { + preferences = await SharedPreferences.getInstance(); + }); + + tearDown(() async { + await preferences.clear(); + SharedPreferences.resetStatic(); + }); + + runAllTests(); + }); + + group('setPrefix', () { + setUp(() async { + SharedPreferences.resetStatic(); + SharedPreferences.setPrefix('prefix.'); + preferences = await SharedPreferences.getInstance(); + }); + + tearDown(() async { + await preferences.clear(); + SharedPreferences.resetStatic(); + }); + + runAllTests(); + }); + + group('setNoPrefix', () { + setUp(() async { + SharedPreferences.resetStatic(); + SharedPreferences.setPrefix(''); + preferences = await SharedPreferences.getInstance(); + }); + + tearDown(() async { + await preferences.clear(); + SharedPreferences.resetStatic(); + }); + + runAllTests(); + }); + + testWidgets('allowList only gets allowed items', (WidgetTester _) async { + const String allowedString = 'stringKey'; + const String allowedBool = 'boolKey'; + const String notAllowedDouble = 'doubleKey'; + const String resultString = 'resultString'; + + const Set allowList = {allowedString, allowedBool}; + + SharedPreferences.resetStatic(); + SharedPreferences.setPrefix('', allowList: allowList); + + final SharedPreferences prefs = await SharedPreferences.getInstance(); + + await prefs.setString(allowedString, resultString); + await prefs.setBool(allowedBool, true); + await prefs.setDouble(notAllowedDouble, 3.14); + + await prefs.reload(); + + final String? testString = prefs.getString(allowedString); + expect(testString, resultString); + + final bool? testBool = prefs.getBool(allowedBool); + expect(testBool, true); + + final double? testDouble = prefs.getDouble(notAllowedDouble); + expect(testDouble, null); }); } diff --git a/packages/shared_preferences/example/pubspec.yaml b/packages/shared_preferences/example/pubspec.yaml index 6bf98c195..43021b29f 100644 --- a/packages/shared_preferences/example/pubspec.yaml +++ b/packages/shared_preferences/example/pubspec.yaml @@ -9,7 +9,7 @@ environment: dependencies: flutter: sdk: flutter - shared_preferences: ^2.0.9 + shared_preferences: ^2.2.0 shared_preferences_tizen: path: ../ diff --git a/packages/shared_preferences/lib/shared_preferences_tizen.dart b/packages/shared_preferences/lib/shared_preferences_tizen.dart index 95f976561..f52d24ba3 100644 --- a/packages/shared_preferences/lib/shared_preferences_tizen.dart +++ b/packages/shared_preferences/lib/shared_preferences_tizen.dart @@ -7,6 +7,7 @@ import 'dart:ffi'; import 'package:ffi/ffi.dart'; import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart'; +import 'package:shared_preferences_platform_interface/types.dart'; import 'package:tizen_interop/4.0/tizen.dart'; /// The Tizen implementation of [SharedPreferencesStorePlatform]. @@ -82,9 +83,34 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { return tizen.preference_remove_all() == 0; } + @override + Future clearWithParameters(ClearParameters parameters) async { + final PreferencesFilter filter = parameters.filter; + final List keys = List.of(_preferences.keys); + bool failed = false; + for (final String key in keys) { + if (key.startsWith(filter.prefix) && + (filter.allowList == null || filter.allowList!.contains(key))) { + failed |= !(await remove(key)); + } + } + return failed; + } + @override Future> getAll() async => _preferences; + @override + Future> getAllWithParameters( + GetAllParameters parameters) async { + final PreferencesFilter filter = parameters.filter; + final Map withPrefix = + Map.from(_preferences); + withPrefix.removeWhere((String key, _) => !(key.startsWith(filter.prefix) && + (filter.allowList?.contains(key) ?? true))); + return withPrefix; + } + @override Future remove(String key) async { return using((Arena arena) { diff --git a/packages/shared_preferences/pubspec.yaml b/packages/shared_preferences/pubspec.yaml index f3927cb32..3eb81ee1e 100644 --- a/packages/shared_preferences/pubspec.yaml +++ b/packages/shared_preferences/pubspec.yaml @@ -18,5 +18,5 @@ dependencies: ffi: ^2.0.1 flutter: sdk: flutter - shared_preferences_platform_interface: ^2.0.0 + shared_preferences_platform_interface: ^2.3.0 tizen_interop: ^0.2.0 From ea7f230e1fdb01d0c1c47fdb0726b4cb46af5bc0 Mon Sep 17 00:00:00 2001 From: jhd0 Date: Thu, 20 Jul 2023 13:15:22 +0900 Subject: [PATCH 2/6] fix tizen plugin update version from 2.1.1 to 2.2.0 --- packages/shared_preferences/CHANGELOG.md | 2 +- packages/shared_preferences/README.md | 2 +- packages/shared_preferences/pubspec.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/shared_preferences/CHANGELOG.md b/packages/shared_preferences/CHANGELOG.md index ca132cdfc..dc6e2f239 100644 --- a/packages/shared_preferences/CHANGELOG.md +++ b/packages/shared_preferences/CHANGELOG.md @@ -1,4 +1,4 @@ -## 2.1.1 +## 2.2.0 * Increase the minimum Flutter version to 3.3. * Update shared_preferences to 2.2.0. diff --git a/packages/shared_preferences/README.md b/packages/shared_preferences/README.md index 646c6b9a2..1993a73a3 100644 --- a/packages/shared_preferences/README.md +++ b/packages/shared_preferences/README.md @@ -11,7 +11,7 @@ This package is not an _endorsed_ implementation of `shared_preferences`. Theref ```yaml dependencies: shared_preferences: ^2.2.0 - shared_preferences_tizen: ^2.1.1 + shared_preferences_tizen: ^2.2.0 ``` Then you can import `shared_preferences` in your Dart code: diff --git a/packages/shared_preferences/pubspec.yaml b/packages/shared_preferences/pubspec.yaml index 3eb81ee1e..3d3ff391b 100644 --- a/packages/shared_preferences/pubspec.yaml +++ b/packages/shared_preferences/pubspec.yaml @@ -2,7 +2,7 @@ name: shared_preferences_tizen description: Tizen implementation of the shared_preferences plugin. homepage: https://github.com/flutter-tizen/plugins repository: https://github.com/flutter-tizen/plugins/tree/master/packages/shared_preferences -version: 2.1.0 +version: 2.2.0 environment: sdk: ">=2.18.0 <4.0.0" From 652b27e9d89e5cfd0db6f713e5ebea1a7bcf2cf6 Mon Sep 17 00:00:00 2001 From: jhd0 Date: Thu, 20 Jul 2023 14:12:37 +0900 Subject: [PATCH 3/6] fix CHANGELOG.md --- packages/shared_preferences/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/shared_preferences/CHANGELOG.md b/packages/shared_preferences/CHANGELOG.md index dc6e2f239..6c0b853f6 100644 --- a/packages/shared_preferences/CHANGELOG.md +++ b/packages/shared_preferences/CHANGELOG.md @@ -3,6 +3,7 @@ * Increase the minimum Flutter version to 3.3. * Update shared_preferences to 2.2.0. * Update shared_preferences_interface to 2.3.0. +* Add `clearWithParameters` and `getAllWithParameters`. * Update integration_test. ## 2.1.0 From 3016957a1916040871e51b1832d7058e4e36d1a7 Mon Sep 17 00:00:00 2001 From: jhd0 Date: Thu, 20 Jul 2023 14:21:28 +0900 Subject: [PATCH 4/6] fix clearWithParameters returns wrong result --- packages/shared_preferences/lib/shared_preferences_tizen.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared_preferences/lib/shared_preferences_tizen.dart b/packages/shared_preferences/lib/shared_preferences_tizen.dart index f52d24ba3..5e552aee1 100644 --- a/packages/shared_preferences/lib/shared_preferences_tizen.dart +++ b/packages/shared_preferences/lib/shared_preferences_tizen.dart @@ -94,7 +94,7 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { failed |= !(await remove(key)); } } - return failed; + return !failed; } @override From f41ddd3f7f5449c6f47c3bd74a20ac632e0fa361 Mon Sep 17 00:00:00 2001 From: jhd0 Date: Thu, 20 Jul 2023 15:12:23 +0900 Subject: [PATCH 5/6] fix clearWithParameters stop loop when failed --- .../shared_preferences/lib/shared_preferences_tizen.dart | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/shared_preferences/lib/shared_preferences_tizen.dart b/packages/shared_preferences/lib/shared_preferences_tizen.dart index 5e552aee1..729e7b3c2 100644 --- a/packages/shared_preferences/lib/shared_preferences_tizen.dart +++ b/packages/shared_preferences/lib/shared_preferences_tizen.dart @@ -87,14 +87,16 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { Future clearWithParameters(ClearParameters parameters) async { final PreferencesFilter filter = parameters.filter; final List keys = List.of(_preferences.keys); - bool failed = false; + for (final String key in keys) { if (key.startsWith(filter.prefix) && (filter.allowList == null || filter.allowList!.contains(key))) { - failed |= !(await remove(key)); + if (!(await remove(key))) { + return false; + } } } - return !failed; + return true; } @override From 652c6f1f2ad0ecbc330e667779db2d7221f41276 Mon Sep 17 00:00:00 2001 From: jhd0 Date: Thu, 20 Jul 2023 16:44:06 +0900 Subject: [PATCH 6/6] Update clear and getAll --- packages/shared_preferences/CHANGELOG.md | 2 ++ .../lib/shared_preferences_tizen.dart | 14 ++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/shared_preferences/CHANGELOG.md b/packages/shared_preferences/CHANGELOG.md index 6c0b853f6..cc8680c41 100644 --- a/packages/shared_preferences/CHANGELOG.md +++ b/packages/shared_preferences/CHANGELOG.md @@ -4,6 +4,8 @@ * Update shared_preferences to 2.2.0. * Update shared_preferences_interface to 2.3.0. * Add `clearWithParameters` and `getAllWithParameters`. +* Update `clear` to use `clearWithParameters` +* Update `getAll` to use `getAllWithParameters` * Update integration_test. ## 2.1.0 diff --git a/packages/shared_preferences/lib/shared_preferences_tizen.dart b/packages/shared_preferences/lib/shared_preferences_tizen.dart index 729e7b3c2..8dd4e47ab 100644 --- a/packages/shared_preferences/lib/shared_preferences_tizen.dart +++ b/packages/shared_preferences/lib/shared_preferences_tizen.dart @@ -17,6 +17,8 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { SharedPreferencesStorePlatform.instance = SharedPreferencesPlugin(); } + static const String _defaultPrefix = 'flutter.'; + static Map? _cachedPreferences; static const String _separator = '␞'; @@ -78,9 +80,9 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { @override Future clear() async { - _preferences.clear(); - - return tizen.preference_remove_all() == 0; + return clearWithParameters(ClearParameters( + filter: PreferencesFilter(prefix: _defaultPrefix), + )); } @override @@ -100,7 +102,11 @@ class SharedPreferencesPlugin extends SharedPreferencesStorePlatform { } @override - Future> getAll() async => _preferences; + Future> getAll() async { + return getAllWithParameters( + GetAllParameters(filter: PreferencesFilter(prefix: _defaultPrefix)), + ); + } @override Future> getAllWithParameters(