[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;