diff --git a/packages/shared_preferences/shared_preferences/CHANGELOG.md b/packages/shared_preferences/shared_preferences/CHANGELOG.md index 5df6b1f51dd..b3ab617f538 100644 --- a/packages/shared_preferences/shared_preferences/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.3.1 + +* Fixes `getStringList` bug with `List` cast exception. + ## 2.3.0 * Adds `SharedPreferencesAsync` and `SharedPreferencesWithCache` APIs. diff --git a/packages/shared_preferences/shared_preferences/example/integration_test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences/example/integration_test/shared_preferences_test.dart index 08afb46b9b8..07cd53e4d81 100644 --- a/packages/shared_preferences/shared_preferences/example/integration_test/shared_preferences_test.dart +++ b/packages/shared_preferences/shared_preferences/example/integration_test/shared_preferences_test.dart @@ -587,6 +587,17 @@ void main() { expect(preferences.getStringList(listKey), testList); }); + testWidgets('get StringList handles List', + (WidgetTester _) async { + final ( + SharedPreferencesWithCache preferences, + Map cache + ) = await getPreferences(); + final List listObject = ['one', 'two']; + cache[listKey] = listObject; + expect(preferences.getStringList(listKey), listObject); + }); + testWidgets('reloading', (WidgetTester _) async { final ( SharedPreferencesWithCache preferences, diff --git a/packages/shared_preferences/shared_preferences/lib/src/shared_preferences_async.dart b/packages/shared_preferences/shared_preferences/lib/src/shared_preferences_async.dart index 56ea4e33dfa..516788542fd 100644 --- a/packages/shared_preferences/shared_preferences/lib/src/shared_preferences_async.dart +++ b/packages/shared_preferences/shared_preferences/lib/src/shared_preferences_async.dart @@ -307,9 +307,8 @@ class SharedPreferencesWithCache { throw ArgumentError( '$key is not included in the PreferencesFilter allowlist'); } - final List? list = _cache[key] as List?; // Make a copy of the list so that later mutations won't propagate - return list?.toList(); + return (_cache[key] as List?)?.cast().toList(); } /// Saves a boolean [value] to the cache and platform. diff --git a/packages/shared_preferences/shared_preferences/pubspec.yaml b/packages/shared_preferences/shared_preferences/pubspec.yaml index ada0f98ff36..60cff3ab334 100644 --- a/packages/shared_preferences/shared_preferences/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for reading and writing simple key-value pairs. Wraps NSUserDefaults on iOS and SharedPreferences on Android. repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences 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.3.0