From e56a77782152e281103ce2575cb97ca396a42766 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Fri, 9 Aug 2024 11:35:59 -0700 Subject: [PATCH 1/7] fix cast error and mutable list error --- .../shared_preferences_android/CHANGELOG.md | 4 ++++ .../shared_preferences_test.dart | 10 ++++++++++ .../src/shared_preferences_async_android.dart | 3 ++- .../shared_preferences_android/pubspec.yaml | 2 +- .../shared_preferences_foundation/CHANGELOG.md | 3 ++- .../shared_preferences_test.dart | 10 ++++++++++ .../shared_preferences_async_foundation.dart | 3 ++- .../shared_preferences_foundation/pubspec.yaml | 2 +- .../shared_preferences_linux/CHANGELOG.md | 4 +++- .../shared_preferences_test.dart | 18 ++++++++++++++++++ .../lib/shared_preferences_linux.dart | 2 +- .../shared_preferences_linux/pubspec.yaml | 2 +- .../shared_preferences_web/CHANGELOG.md | 3 ++- .../shared_preferences_web_test.dart | 10 ++++++++++ .../lib/shared_preferences_web.dart | 2 +- .../shared_preferences_web/pubspec.yaml | 2 +- .../shared_preferences_windows/CHANGELOG.md | 4 +++- .../shared_preferences_test.dart | 18 ++++++++++++++++++ .../lib/shared_preferences_windows.dart | 2 +- .../shared_preferences_windows/pubspec.yaml | 2 +- 20 files changed, 92 insertions(+), 14 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md index 1691a73764c6..e37c4f051d28 100644 --- a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.3.1 + +* Fixes `getStringList` returning immutable list. + ## 2.3.0 * Adds new `SharedPreferencesAsyncAndroid` API. diff --git a/packages/shared_preferences/shared_preferences_android/example/integration_test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_android/example/integration_test/shared_preferences_test.dart index 0c4527f46706..48f451d20a1f 100644 --- a/packages/shared_preferences/shared_preferences_android/example/integration_test/shared_preferences_test.dart +++ b/packages/shared_preferences/shared_preferences_android/example/integration_test/shared_preferences_test.dart @@ -555,6 +555,16 @@ void main() { expect(await preferences.getStringList(listKey, emptyOptions), testList); }); + testWidgets('getStringList returns mutable list', (WidgetTester _) async { + final SharedPreferencesAsyncPlatform preferences = await getPreferences(); + + await preferences.setStringList(listKey, testList, emptyOptions); + final List? list = + await preferences.getStringList(listKey, emptyOptions); + list?.add('value'); + expect(list?.length, testList.length + 1); + }); + testWidgets('getPreferences', (WidgetTester _) async { final SharedPreferencesAsyncPlatform preferences = await getPreferences(); await Future.wait(>[ diff --git a/packages/shared_preferences/shared_preferences_android/lib/src/shared_preferences_async_android.dart b/packages/shared_preferences/shared_preferences_android/lib/src/shared_preferences_async_android.dart index 7b9b8fa6ade2..7b3f1cb7b352 100644 --- a/packages/shared_preferences/shared_preferences_android/lib/src/shared_preferences_async_android.dart +++ b/packages/shared_preferences/shared_preferences_android/lib/src/shared_preferences_async_android.dart @@ -146,7 +146,8 @@ base class SharedPreferencesAsyncAndroid // is fixed. In practice, the values will never be null, and the native implementation assumes that. return _convertKnownExceptions>(() async => (await _api.getStringList(key, _convertOptionsToPigeonOptions(options))) - ?.cast()); + ?.cast() + .toList()); } Future _convertKnownExceptions(Future Function() method) async { diff --git a/packages/shared_preferences/shared_preferences_android/pubspec.yaml b/packages/shared_preferences/shared_preferences_android/pubspec.yaml index bd1adb8cb9c8..f86a08afdc6d 100644 --- a/packages/shared_preferences/shared_preferences_android/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_android/pubspec.yaml @@ -2,7 +2,7 @@ name: shared_preferences_android description: Android implementation of the shared_preferences plugin repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22 -version: 2.3.0 +version: 2.3.1 environment: sdk: ^3.4.0 diff --git a/packages/shared_preferences/shared_preferences_foundation/CHANGELOG.md b/packages/shared_preferences/shared_preferences_foundation/CHANGELOG.md index 1eec97916734..dbd80f8926d5 100644 --- a/packages/shared_preferences/shared_preferences_foundation/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_foundation/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.5.1 +* Fixes `getStringList` returning immutable list. * Updates minimum supported SDK version to Flutter 3.19/Dart 3.3. ## 2.5.0 diff --git a/packages/shared_preferences/shared_preferences_foundation/example/integration_test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_foundation/example/integration_test/shared_preferences_test.dart index 67777288d983..672f453e5ecd 100644 --- a/packages/shared_preferences/shared_preferences_foundation/example/integration_test/shared_preferences_test.dart +++ b/packages/shared_preferences/shared_preferences_foundation/example/integration_test/shared_preferences_test.dart @@ -544,6 +544,16 @@ void main() { expect(await preferences.getStringList(listKey, emptyOptions), testList); }); + testWidgets('getStringList returns mutable list', (WidgetTester _) async { + final SharedPreferencesAsyncPlatform preferences = await getPreferences(); + + await preferences.setStringList(listKey, testList, emptyOptions); + final List? list = + await preferences.getStringList(listKey, emptyOptions); + list?.add('value'); + expect(list?.length, testList.length + 1); + }); + testWidgets('getPreferences', (WidgetTester _) async { final SharedPreferencesAsyncPlatform preferences = await getPreferences(); await Future.wait(>[ diff --git a/packages/shared_preferences/shared_preferences_foundation/lib/src/shared_preferences_async_foundation.dart b/packages/shared_preferences/shared_preferences_foundation/lib/src/shared_preferences_async_foundation.dart index 3bf3bc24149d..df60e88522db 100644 --- a/packages/shared_preferences/shared_preferences_foundation/lib/src/shared_preferences_async_foundation.dart +++ b/packages/shared_preferences/shared_preferences_foundation/lib/src/shared_preferences_async_foundation.dart @@ -158,7 +158,8 @@ base class SharedPreferencesAsyncFoundation return _convertKnownExceptions>(() async => ((await _api.getValue(key, _convertOptionsToPigeonOptions(options))) as List?) - ?.cast()); + ?.cast() + .toList()); } @override diff --git a/packages/shared_preferences/shared_preferences_foundation/pubspec.yaml b/packages/shared_preferences/shared_preferences_foundation/pubspec.yaml index f465f9120d1b..50b20675b808 100644 --- a/packages/shared_preferences/shared_preferences_foundation/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_foundation/pubspec.yaml @@ -2,7 +2,7 @@ name: shared_preferences_foundation description: iOS and macOS implementation of the shared_preferences plugin. repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences_foundation issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22 -version: 2.5.0 +version: 2.5.1 environment: sdk: ^3.3.0 diff --git a/packages/shared_preferences/shared_preferences_linux/CHANGELOG.md b/packages/shared_preferences/shared_preferences_linux/CHANGELOG.md index 6d467e9f05ec..43c46f51a84f 100644 --- a/packages/shared_preferences/shared_preferences_linux/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_linux/CHANGELOG.md @@ -1,5 +1,7 @@ -## NEXT +## 2.4.1 +* Fixes `getStringList` returning immutable list. +* Fixes `getStringList` cast error. * Updates minimum supported SDK version to Flutter 3.19/Dart 3.3. ## 2.4.0 diff --git a/packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart index 370839f0e9c3..53432c239fe3 100644 --- a/packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart +++ b/packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart @@ -397,6 +397,24 @@ void main() { await preferences.setStringList(listKey, testList, emptyOptions); expect(await preferences.getStringList(listKey, emptyOptions), testList); }); + testWidgets('getStringList does not throw cast error', + (WidgetTester _) async { + SharedPreferencesAsyncPlatform preferences = await getPreferences(); + + await preferences.setStringList(listKey, testList, emptyOptions); + preferences = await getPreferences(); + expect(await preferences.getStringList(listKey, emptyOptions), testList); + }); + + testWidgets('getStringList returns mutable list', (WidgetTester _) async { + final SharedPreferencesAsyncPlatform preferences = await getPreferences(); + + await preferences.setStringList(listKey, testList, emptyOptions); + final List? list = + await preferences.getStringList(listKey, emptyOptions); + list?.add('value'); + expect(list?.length, testList.length + 1); + }); testWidgets('getPreferences', (WidgetTester _) async { final SharedPreferencesAsyncPlatform preferences = await getPreferences(); diff --git a/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart b/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart index 4c7e5268ce1d..77506d931b7b 100644 --- a/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart +++ b/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart @@ -253,7 +253,7 @@ base class SharedPreferencesAsyncLinux extends SharedPreferencesAsyncPlatform { SharedPreferencesOptions options, ) async { final Map data = await _readAll({key}, options); - return (data[key] as List?)?.toList(); + return (data[key] as List?)?.cast().toList(); } @override diff --git a/packages/shared_preferences/shared_preferences_linux/pubspec.yaml b/packages/shared_preferences/shared_preferences_linux/pubspec.yaml index 3e0b0faa64f2..c43a21bdb95f 100644 --- a/packages/shared_preferences/shared_preferences_linux/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_linux/pubspec.yaml @@ -2,7 +2,7 @@ name: shared_preferences_linux description: Linux implementation of the shared_preferences plugin repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences_linux issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22 -version: 2.4.0 +version: 2.4.1 environment: sdk: ^3.3.0 diff --git a/packages/shared_preferences/shared_preferences_web/CHANGELOG.md b/packages/shared_preferences/shared_preferences_web/CHANGELOG.md index 410e0186fd54..a1c53c014650 100644 --- a/packages/shared_preferences/shared_preferences_web/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_web/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.4.2 +* Fixes `getStringList` returning immutable list. * Updates minimum supported SDK version to Flutter 3.22/Dart 3.4. ## 2.4.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 aeb1a6c2a65c..90ebbc5b899c 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 @@ -444,6 +444,16 @@ void main() { expect(await preferences.getStringList(listKey, emptyOptions), testList); }); + testWidgets('getStringList returns mutable list', (WidgetTester _) async { + final SharedPreferencesAsyncPlatform preferences = await getPreferences(); + + await preferences.setStringList(listKey, testList, emptyOptions); + final List? list = + await preferences.getStringList(listKey, emptyOptions); + list?.add('value'); + expect(list?.length, testList.length + 1); + }); + testWidgets('getPreferences', (WidgetTester _) async { final SharedPreferencesAsyncPlatform preferences = await getPreferences(); await Future.wait(>[ 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 be75e1786bd4..97160b5d150e 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 @@ -243,7 +243,7 @@ base class SharedPreferencesAsyncWeb extends SharedPreferencesAsyncPlatform { ) async { final Map data = await _readAllFromLocalStorage({key}, options); - return data[key] as List?; + return (data[key] as List?)?.toList(); } } diff --git a/packages/shared_preferences/shared_preferences_web/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/pubspec.yaml index 623906aeef23..a8592342dc23 100644 --- a/packages/shared_preferences/shared_preferences_web/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_web/pubspec.yaml @@ -2,7 +2,7 @@ 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.4.1 +version: 2.4.2 environment: sdk: ^3.4.0 diff --git a/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md b/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md index f2053f3f9076..d2cf5d62ace9 100644 --- a/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md @@ -1,5 +1,7 @@ -## NEXT +## 2.4.1 +* Fixes `getStringList` returning immutable list. +* Fixes `getStringList` cast error. * Updates minimum supported SDK version to Flutter 3.19/Dart 3.3. ## 2.4.0 diff --git a/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart index 5549b9b5debd..0506648b37ab 100644 --- a/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart +++ b/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart @@ -397,6 +397,24 @@ void main() { await preferences.setStringList(listKey, testList, emptyOptions); expect(await preferences.getStringList(listKey, emptyOptions), testList); }); + testWidgets('getStringList does not throw cast error', + (WidgetTester _) async { + SharedPreferencesAsyncPlatform preferences = await getPreferences(); + + await preferences.setStringList(listKey, testList, emptyOptions); + preferences = await getPreferences(); + expect(await preferences.getStringList(listKey, emptyOptions), testList); + }); + + testWidgets('getStringList returns mutable list', (WidgetTester _) async { + final SharedPreferencesAsyncPlatform preferences = await getPreferences(); + + await preferences.setStringList(listKey, testList, emptyOptions); + final List? list = + await preferences.getStringList(listKey, emptyOptions); + list?.add('value'); + expect(list?.length, testList.length + 1); + }); testWidgets('getPreferences', (WidgetTester _) async { final SharedPreferencesAsyncPlatform preferences = await getPreferences(); diff --git a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart index 0a2ec7688e7b..b7f8d94d38be 100644 --- a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart +++ b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart @@ -254,7 +254,7 @@ base class SharedPreferencesAsyncWindows SharedPreferencesOptions options, ) async { final Map data = await _readAll({key}, options); - return (data[key] as List?)?.toList(); + return (data[key] as List?)?.cast().toList(); } @override diff --git a/packages/shared_preferences/shared_preferences_windows/pubspec.yaml b/packages/shared_preferences/shared_preferences_windows/pubspec.yaml index 579e36925dd0..59c3274488b4 100644 --- a/packages/shared_preferences/shared_preferences_windows/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_windows/pubspec.yaml @@ -2,7 +2,7 @@ name: shared_preferences_windows description: Windows implementation of shared_preferences repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences_windows issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22 -version: 2.4.0 +version: 2.4.1 environment: sdk: ^3.3.0 From 8e5d92fd131ca044ca83b4c1f2c679985e46cf28 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Fri, 9 Aug 2024 11:48:37 -0700 Subject: [PATCH 2/7] fix desktop test --- .../integration_test/shared_preferences_test.dart | 13 ++++++++----- .../integration_test/shared_preferences_test.dart | 13 ++++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart index 53432c239fe3..3ff65b3c157d 100644 --- a/packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart +++ b/packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart @@ -354,12 +354,15 @@ void main() { const double testDouble = 3.14159; const List testList = ['foo', 'bar']; - Future getPreferences() async { + Future getPreferences( + {bool clear = true}) async { final SharedPreferencesAsyncPlatform preferences = SharedPreferencesAsyncPlatform.instance!; - await preferences.clear( - const ClearPreferencesParameters(filter: PreferencesFilters()), - emptyOptions); + if (clear) { + await preferences.clear( + const ClearPreferencesParameters(filter: PreferencesFilters()), + emptyOptions); + } return preferences; } @@ -402,7 +405,7 @@ void main() { SharedPreferencesAsyncPlatform preferences = await getPreferences(); await preferences.setStringList(listKey, testList, emptyOptions); - preferences = await getPreferences(); + preferences = await getPreferences(clear: false); expect(await preferences.getStringList(listKey, emptyOptions), testList); }); diff --git a/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart index 0506648b37ab..48800b0facbc 100644 --- a/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart +++ b/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart @@ -354,12 +354,15 @@ void main() { const double testDouble = 3.14159; const List testList = ['foo', 'bar']; - Future getPreferences() async { + Future getPreferences( + {bool clear = true}) async { final SharedPreferencesAsyncPlatform preferences = SharedPreferencesAsyncPlatform.instance!; - await preferences.clear( - const ClearPreferencesParameters(filter: PreferencesFilters()), - emptyOptions); + if (clear) { + await preferences.clear( + const ClearPreferencesParameters(filter: PreferencesFilters()), + emptyOptions); + } return preferences; } @@ -402,7 +405,7 @@ void main() { SharedPreferencesAsyncPlatform preferences = await getPreferences(); await preferences.setStringList(listKey, testList, emptyOptions); - preferences = await getPreferences(); + preferences = await getPreferences(clear: false); expect(await preferences.getStringList(listKey, emptyOptions), testList); }); From 1a55809fc471ecfe3110f9e6f36987a200e9139d Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Fri, 9 Aug 2024 12:09:34 -0700 Subject: [PATCH 3/7] This should fail --- .../shared_preferences_linux/lib/shared_preferences_linux.dart | 2 +- .../lib/shared_preferences_windows.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart b/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart index 77506d931b7b..4c7e5268ce1d 100644 --- a/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart +++ b/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart @@ -253,7 +253,7 @@ base class SharedPreferencesAsyncLinux extends SharedPreferencesAsyncPlatform { SharedPreferencesOptions options, ) async { final Map data = await _readAll({key}, options); - return (data[key] as List?)?.cast().toList(); + return (data[key] as List?)?.toList(); } @override diff --git a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart index b7f8d94d38be..0a2ec7688e7b 100644 --- a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart +++ b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart @@ -254,7 +254,7 @@ base class SharedPreferencesAsyncWindows SharedPreferencesOptions options, ) async { final Map data = await _readAll({key}, options); - return (data[key] as List?)?.cast().toList(); + return (data[key] as List?)?.toList(); } @override From 4d41b309996aeea9c94471c66818fb24dfb04b80 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Fri, 9 Aug 2024 12:43:03 -0700 Subject: [PATCH 4/7] test test --- .../example/integration_test/shared_preferences_test.dart | 4 ++-- .../lib/shared_preferences_linux.dart | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart index 3ff65b3c157d..fdabea41342e 100644 --- a/packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart +++ b/packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart @@ -402,10 +402,10 @@ void main() { }); testWidgets('getStringList does not throw cast error', (WidgetTester _) async { - SharedPreferencesAsyncPlatform preferences = await getPreferences(); + final SharedPreferencesAsyncPlatform preferences = await getPreferences(); await preferences.setStringList(listKey, testList, emptyOptions); - preferences = await getPreferences(clear: false); + await (preferences as SharedPreferencesAsyncLinux).reload(emptyOptions); expect(await preferences.getStringList(listKey, emptyOptions), testList); }); diff --git a/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart b/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart index 4c7e5268ce1d..b74933cd1fff 100644 --- a/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart +++ b/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart @@ -282,6 +282,13 @@ base class SharedPreferencesAsyncLinux extends SharedPreferencesAsyncPlatform { return _readAll(parameters.filter.allowList, options); } + /// + Future reload( + SharedPreferencesLinuxOptions options, + ) { + return _reload(options.fileName); + } + Future> _readAll( Set? allowList, SharedPreferencesOptions options, From 0635c22b15d6d96e1ee95b1ca4fe41dea33ebd83 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Fri, 9 Aug 2024 12:50:26 -0700 Subject: [PATCH 5/7] fix test test test fix --- .../lib/shared_preferences_linux.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart b/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart index b74933cd1fff..fa3bec77c96f 100644 --- a/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart +++ b/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart @@ -285,8 +285,8 @@ base class SharedPreferencesAsyncLinux extends SharedPreferencesAsyncPlatform { /// Future reload( SharedPreferencesLinuxOptions options, - ) { - return _reload(options.fileName); + ) async { + _cachedPreferences = await _reload(options.fileName); } Future> _readAll( From 2dbef0df3a16104df3099f0f4c7a4f153de9710b Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Fri, 9 Aug 2024 12:59:32 -0700 Subject: [PATCH 6/7] fix test and fix code for test --- .../lib/shared_preferences_linux.dart | 5 +++-- .../integration_test/shared_preferences_test.dart | 4 ++-- .../lib/shared_preferences_windows.dart | 10 +++++++++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart b/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart index fa3bec77c96f..d4ede84ec2b9 100644 --- a/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart +++ b/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart @@ -253,7 +253,7 @@ base class SharedPreferencesAsyncLinux extends SharedPreferencesAsyncPlatform { SharedPreferencesOptions options, ) async { final Map data = await _readAll({key}, options); - return (data[key] as List?)?.toList(); + return (data[key] as List?)?.cast().toList(); } @override @@ -282,7 +282,8 @@ base class SharedPreferencesAsyncLinux extends SharedPreferencesAsyncPlatform { return _readAll(parameters.filter.allowList, options); } - /// + /// Reloads preferences from file. + @visibleForTesting Future reload( SharedPreferencesLinuxOptions options, ) async { diff --git a/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart index 48800b0facbc..2de01a8d1e5f 100644 --- a/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart +++ b/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart @@ -402,10 +402,10 @@ void main() { }); testWidgets('getStringList does not throw cast error', (WidgetTester _) async { - SharedPreferencesAsyncPlatform preferences = await getPreferences(); + final SharedPreferencesAsyncPlatform preferences = await getPreferences(); await preferences.setStringList(listKey, testList, emptyOptions); - preferences = await getPreferences(clear: false); + await (preferences as SharedPreferencesAsyncWindows).reload(emptyOptions); expect(await preferences.getStringList(listKey, emptyOptions), testList); }); diff --git a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart index 0a2ec7688e7b..5d72b9823b1a 100644 --- a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart +++ b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart @@ -254,7 +254,7 @@ base class SharedPreferencesAsyncWindows SharedPreferencesOptions options, ) async { final Map data = await _readAll({key}, options); - return (data[key] as List?)?.toList(); + return (data[key] as List?)?.cast().toList(); } @override @@ -283,6 +283,14 @@ base class SharedPreferencesAsyncWindows return _readAll(parameters.filter.allowList, options); } + /// Reloads preferences from file. + @visibleForTesting + Future reload( + SharedPreferencesWindowsOptions options, + ) async { + _cachedPreferences = await _readFromFile(options.fileName); + } + Future> _readAll( Set? allowList, SharedPreferencesOptions options, From 806aea4b26da7d006ba606afcb2ac7d75ac1a126 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Fri, 9 Aug 2024 13:01:01 -0700 Subject: [PATCH 7/7] nit --- .../example/integration_test/shared_preferences_test.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart index 2de01a8d1e5f..79192ad28ebc 100644 --- a/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart +++ b/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart @@ -400,6 +400,7 @@ void main() { await preferences.setStringList(listKey, testList, emptyOptions); expect(await preferences.getStringList(listKey, emptyOptions), testList); }); + testWidgets('getStringList does not throw cast error', (WidgetTester _) async { final SharedPreferencesAsyncPlatform preferences = await getPreferences();