Skip to content

Commit 4fe6c45

Browse files
Chris Yangadsonpleal
Chris Yang
authored andcommitted
[shared_preferences] fix crash when list type is dynaimc (flutter#3565)
1 parent 1c8d120 commit 4fe6c45

File tree

4 files changed

+16
-2
lines changed

4 files changed

+16
-2
lines changed

packages/shared_preferences/shared_preferences/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 2.0.0-nullsafety.1
2+
3+
* Fix crash when list string's type is dynamic.
4+
15
## 2.0.0-nullsafety
26

37
* Migrate to null-safety.

packages/shared_preferences/shared_preferences/lib/shared_preferences.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ class SharedPreferences {
107107
/// Reads a set of string values from persistent storage, throwing an
108108
/// exception if it's not a string set.
109109
List<String>? getStringList(String key) {
110-
List<Object>? list = _preferenceCache[key] as List<Object>?;
110+
List<dynamic>? list = _preferenceCache[key] as List<dynamic>?;
111111
if (list != null && list is! List<String>) {
112112
list = list.cast<String>().toList();
113113
_preferenceCache[key] = list;

packages/shared_preferences/shared_preferences/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: shared_preferences
22
description: Flutter plugin for reading and writing simple key-value pairs.
33
Wraps NSUserDefaults on iOS and SharedPreferences on Android.
44
homepage: https://github.com/flutter/plugins/tree/master/packages/shared_preferences/shared_preferences
5-
version: 2.0.0-nullsafety
5+
version: 2.0.0-nullsafety.1
66

77
flutter:
88
plugin:

packages/shared_preferences/shared_preferences/test/shared_preferences_test.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ void main() {
3939

4040
tearDown(() async {
4141
await preferences.clear();
42+
await store.clear();
4243
});
4344

4445
test('reading', () async {
@@ -156,6 +157,15 @@ void main() {
156157
expect(await first, await second);
157158
});
158159

160+
test('string list type is dynamic (usually from method channel)', () async {
161+
SharedPreferences.setMockInitialValues(<String, Object>{
162+
'dynamic_list': <dynamic>['1', '2']
163+
});
164+
final SharedPreferences prefs = await SharedPreferences.getInstance();
165+
final List<String>? value = prefs.getStringList('dynamic_list');
166+
expect(value, <String>['1', '2']);
167+
});
168+
159169
group('mocking', () {
160170
const String _key = 'dummy';
161171
const String _prefixedKey = 'flutter.' + _key;

0 commit comments

Comments
 (0)