From d824b03e2fc2498df86ac0a7b77616d35927098c Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Tue, 26 Jan 2021 11:32:30 -0800 Subject: [PATCH 1/4] migrate --- .../CHANGELOG.md | 4 ++ .../method_channel_shared_preferences.dart | 40 +++++++------------ .../pubspec.yaml | 7 ++-- ...ethod_channel_shared_preferences_test.dart | 14 +++---- 4 files changed, 28 insertions(+), 37 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_platform_interface/CHANGELOG.md b/packages/shared_preferences/shared_preferences_platform_interface/CHANGELOG.md index 88d3a9ac5f00..6661e2757326 100644 --- a/packages/shared_preferences/shared_preferences_platform_interface/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.0-nullsafety + +* Migrate to null safety. + ## 1.0.5 * Update Flutter SDK constraint. diff --git a/packages/shared_preferences/shared_preferences_platform_interface/lib/method_channel_shared_preferences.dart b/packages/shared_preferences/shared_preferences_platform_interface/lib/method_channel_shared_preferences.dart index 66009a5caf14..f7237f9c013a 100644 --- a/packages/shared_preferences/shared_preferences_platform_interface/lib/method_channel_shared_preferences.dart +++ b/packages/shared_preferences/shared_preferences_platform_interface/lib/method_channel_shared_preferences.dart @@ -18,39 +18,29 @@ const MethodChannel _kChannel = class MethodChannelSharedPreferencesStore extends SharedPreferencesStorePlatform { @override - Future remove(String key) { - return _invokeBoolMethod('remove', { - 'key': key, - }); + Future remove(String key) async { + return await _kChannel.invokeMethod( + 'remove', + {'key': key}, + ) as bool; } @override - Future setValue(String valueType, String key, Object value) { - return _invokeBoolMethod('set$valueType', { - 'key': key, - 'value': value, - }); - } - - Future _invokeBoolMethod(String method, Map params) { - return _kChannel - .invokeMethod(method, params) - // TODO(yjbanov): I copied this from the original - // shared_preferences.dart implementation, but I - // actually do not know why it's necessary to pipe the - // result through an identity function. - // - // Source: https://github.com/flutter/plugins/blob/3a87296a40a2624d200917d58f036baa9fb18df8/packages/shared_preferences/lib/shared_preferences.dart#L134 - .then((dynamic result) => result); + Future setValue(String valueType, String key, Object value) async { + return await _kChannel.invokeMethod( + 'set$valueType', + {'key': key, 'value': value}, + ) as bool; } @override - Future clear() { - return _kChannel.invokeMethod('clear'); + Future clear() async { + return await _kChannel.invokeMethod('clear') as bool; } @override - Future> getAll() { - return _kChannel.invokeMapMethod('getAll'); + Future> getAll() async { + return await _kChannel.invokeMapMethod('getAll') + as Map; } } diff --git a/packages/shared_preferences/shared_preferences_platform_interface/pubspec.yaml b/packages/shared_preferences/shared_preferences_platform_interface/pubspec.yaml index da31497df1c6..9e5d57230761 100644 --- a/packages/shared_preferences/shared_preferences_platform_interface/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_platform_interface/pubspec.yaml @@ -1,18 +1,17 @@ name: shared_preferences_platform_interface description: A common platform interface for the shared_preferences plugin. homepage: https://github.com/flutter/plugins/tree/master/packages/shared_preferences/shared_preferences_platform_interface -version: 1.0.5 +version: 2.0.0-nullsafety dependencies: - meta: ^1.0.4 flutter: sdk: flutter dev_dependencies: flutter_test: sdk: flutter - pedantic: ^1.8.0 + pedantic: ^1.10.0-nullsafety environment: - sdk: ">=2.1.0 <3.0.0" + sdk: ">=2.12.0-0 <3.0.0" flutter: ">=1.12.8" diff --git a/packages/shared_preferences/shared_preferences_platform_interface/test/method_channel_shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_platform_interface/test/method_channel_shared_preferences_test.dart index 4cc79b058675..a31fe70e2868 100644 --- a/packages/shared_preferences/shared_preferences_platform_interface/test/method_channel_shared_preferences_test.dart +++ b/packages/shared_preferences/shared_preferences_platform_interface/test/method_channel_shared_preferences_test.dart @@ -15,7 +15,7 @@ void main() { 'plugins.flutter.io/shared_preferences', ); - const Map kTestValues = { + const Map kTestValues = { 'flutter.String': 'hello world', 'flutter.Bool': true, 'flutter.Int': 42, @@ -23,10 +23,10 @@ void main() { 'flutter.StringList': ['foo', 'bar'], }; - InMemorySharedPreferencesStore testData; + late InMemorySharedPreferencesStore testData; final List log = []; - MethodChannelSharedPreferencesStore store; + late MethodChannelSharedPreferencesStore store; setUp(() async { testData = InMemorySharedPreferencesStore.empty(); @@ -44,9 +44,9 @@ void main() { return await testData.clear(); } final RegExp setterRegExp = RegExp(r'set(.*)'); - final Match match = setterRegExp.matchAsPrefix(methodCall.method); - if (match.groupCount == 1) { - final String valueType = match.group(1); + final Match? match = setterRegExp.matchAsPrefix(methodCall.method); + if (match != null && match.groupCount == 1) { + final String valueType = match.group(1)!; final String key = methodCall.arguments['key']; final Object value = methodCall.arguments['value']; return await testData.setValue(valueType, key, value); @@ -59,8 +59,6 @@ void main() { tearDown(() async { await testData.clear(); - store = null; - testData = null; }); test('getAll', () async { From e9218086e16d11621002871ade403e611ca69e09 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Tue, 26 Jan 2021 12:33:17 -0800 Subject: [PATCH 2/4] update nnbd script and remove meta dependency --- .../lib/shared_preferences_platform_interface.dart | 2 +- script/nnbd_plugins.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_platform_interface/lib/shared_preferences_platform_interface.dart b/packages/shared_preferences/shared_preferences_platform_interface/lib/shared_preferences_platform_interface.dart index 5a2b99ca69b1..cf194f82c267 100644 --- a/packages/shared_preferences/shared_preferences_platform_interface/lib/shared_preferences_platform_interface.dart +++ b/packages/shared_preferences/shared_preferences_platform_interface/lib/shared_preferences_platform_interface.dart @@ -4,7 +4,7 @@ import 'dart:async'; -import 'package:meta/meta.dart'; +import 'package:flutter/foundation.dart'; import 'method_channel_shared_preferences.dart'; diff --git a/script/nnbd_plugins.sh b/script/nnbd_plugins.sh index b2ca25bf6836..0f1b6d8f45bb 100644 --- a/script/nnbd_plugins.sh +++ b/script/nnbd_plugins.sh @@ -16,6 +16,7 @@ readonly NNBD_PLUGINS_LIST=( "path_provider" "plugin_platform_interface" "share" + "shared_preferences" "url_launcher" "video_player" "webview_flutter" @@ -34,7 +35,6 @@ readonly NON_NNBD_PLUGINS_LIST=( # "in_app_purchase" # "quick_actions" # "sensors" - # "shared_preferences" # "wifi_info_flutter" ) From 0382c6f734c4037c042e925d5110f1f66857b6f4 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Wed, 27 Jan 2021 08:32:30 -0800 Subject: [PATCH 3/4] null check getAll --- .../lib/method_channel_shared_preferences.dart | 7 +++++-- .../test/method_channel_shared_preferences_test.dart | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_platform_interface/lib/method_channel_shared_preferences.dart b/packages/shared_preferences/shared_preferences_platform_interface/lib/method_channel_shared_preferences.dart index f7237f9c013a..8a15710548fc 100644 --- a/packages/shared_preferences/shared_preferences_platform_interface/lib/method_channel_shared_preferences.dart +++ b/packages/shared_preferences/shared_preferences_platform_interface/lib/method_channel_shared_preferences.dart @@ -40,7 +40,10 @@ class MethodChannelSharedPreferencesStore @override Future> getAll() async { - return await _kChannel.invokeMapMethod('getAll') - as Map; + final Map? preferences = + await _kChannel.invokeMapMethod('getAll'); + + if (preferences == null) return {}; + return preferences; } } diff --git a/packages/shared_preferences/shared_preferences_platform_interface/test/method_channel_shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_platform_interface/test/method_channel_shared_preferences_test.dart index a31fe70e2868..d828126168ba 100644 --- a/packages/shared_preferences/shared_preferences_platform_interface/test/method_channel_shared_preferences_test.dart +++ b/packages/shared_preferences/shared_preferences_platform_interface/test/method_channel_shared_preferences_test.dart @@ -45,8 +45,8 @@ void main() { } final RegExp setterRegExp = RegExp(r'set(.*)'); final Match? match = setterRegExp.matchAsPrefix(methodCall.method); - if (match != null && match.groupCount == 1) { - final String valueType = match.group(1)!; + if (match?.groupCount == 1) { + final String valueType = match!.group(1)!; final String key = methodCall.arguments['key']; final Object value = methodCall.arguments['value']; return await testData.setValue(valueType, key, value); From 7f696eaa08eb0016fccc7e2f6d9b67b9406d96fd Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Thu, 28 Jan 2021 08:38:45 -0800 Subject: [PATCH 4/4] null check instead of cast --- .../lib/method_channel_shared_preferences.dart | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_platform_interface/lib/method_channel_shared_preferences.dart b/packages/shared_preferences/shared_preferences_platform_interface/lib/method_channel_shared_preferences.dart index 8a15710548fc..c02c537adcbd 100644 --- a/packages/shared_preferences/shared_preferences_platform_interface/lib/method_channel_shared_preferences.dart +++ b/packages/shared_preferences/shared_preferences_platform_interface/lib/method_channel_shared_preferences.dart @@ -19,23 +19,23 @@ class MethodChannelSharedPreferencesStore extends SharedPreferencesStorePlatform { @override Future remove(String key) async { - return await _kChannel.invokeMethod( + return (await _kChannel.invokeMethod( 'remove', {'key': key}, - ) as bool; + ))!; } @override Future setValue(String valueType, String key, Object value) async { - return await _kChannel.invokeMethod( + return (await _kChannel.invokeMethod( 'set$valueType', {'key': key, 'value': value}, - ) as bool; + ))!; } @override Future clear() async { - return await _kChannel.invokeMethod('clear') as bool; + return (await _kChannel.invokeMethod('clear'))!; } @override