[shared_preferences] fix crash when list type is dynaimc (#3565)
diff --git a/packages/shared_preferences/shared_preferences/CHANGELOG.md b/packages/shared_preferences/shared_preferences/CHANGELOG.md
index 1f003ef..a14ebf5 100644
--- a/packages/shared_preferences/shared_preferences/CHANGELOG.md
+++ b/packages/shared_preferences/shared_preferences/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.0-nullsafety.1
+
+* Fix crash when list string's type is dynamic.
+
## 2.0.0-nullsafety
* Migrate to null-safety.
diff --git a/packages/shared_preferences/shared_preferences/lib/shared_preferences.dart b/packages/shared_preferences/shared_preferences/lib/shared_preferences.dart
index 03619fd..2f4ebe7 100644
--- a/packages/shared_preferences/shared_preferences/lib/shared_preferences.dart
+++ b/packages/shared_preferences/shared_preferences/lib/shared_preferences.dart
@@ -107,7 +107,7 @@
/// Reads a set of string values from persistent storage, throwing an
/// exception if it's not a string set.
List<String>? getStringList(String key) {
- List<Object>? list = _preferenceCache[key] as List<Object>?;
+ List<dynamic>? list = _preferenceCache[key] as List<dynamic>?;
if (list != null && list is! List<String>) {
list = list.cast<String>().toList();
_preferenceCache[key] = list;
diff --git a/packages/shared_preferences/shared_preferences/pubspec.yaml b/packages/shared_preferences/shared_preferences/pubspec.yaml
index 1bf314c..fc55697 100644
--- a/packages/shared_preferences/shared_preferences/pubspec.yaml
+++ b/packages/shared_preferences/shared_preferences/pubspec.yaml
@@ -2,7 +2,7 @@
description: Flutter plugin for reading and writing simple key-value pairs.
Wraps NSUserDefaults on iOS and SharedPreferences on Android.
homepage: https://github.com/flutter/plugins/tree/master/packages/shared_preferences/shared_preferences
-version: 2.0.0-nullsafety
+version: 2.0.0-nullsafety.1
flutter:
plugin:
diff --git a/packages/shared_preferences/shared_preferences/test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences/test/shared_preferences_test.dart
index 9f6e720..7866b2e 100755
--- a/packages/shared_preferences/shared_preferences/test/shared_preferences_test.dart
+++ b/packages/shared_preferences/shared_preferences/test/shared_preferences_test.dart
@@ -39,6 +39,7 @@
tearDown(() async {
await preferences.clear();
+ await store.clear();
});
test('reading', () async {
@@ -156,6 +157,15 @@
expect(await first, await second);
});
+ test('string list type is dynamic (usually from method channel)', () async {
+ SharedPreferences.setMockInitialValues(<String, Object>{
+ 'dynamic_list': <dynamic>['1', '2']
+ });
+ final SharedPreferences prefs = await SharedPreferences.getInstance();
+ final List<String>? value = prefs.getStringList('dynamic_list');
+ expect(value, <String>['1', '2']);
+ });
+
group('mocking', () {
const String _key = 'dummy';
const String _prefixedKey = 'flutter.' + _key;