Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit d2c011f

Browse files
[shared_preferences] Migrate examples to NNBD (#3564)
Migrate all examples to NNBD so that the example apps will run in strong mode. Converts macOS example to use the platform interface to remove circular dependencies (code is based on the Linux and Windows versions which already use essentially that approach).
1 parent 4290d18 commit d2c011f

File tree

19 files changed

+138
-92
lines changed

19 files changed

+138
-92
lines changed

packages/shared_preferences/shared_preferences/example/integration_test/shared_preferences_test.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
// Copyright 2017 The Chromium Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
// @dart=2.9
6+
17
import 'dart:async';
28
import 'package:flutter_test/flutter_test.dart';
39
import 'package:shared_preferences/shared_preferences.dart';

packages/shared_preferences/shared_preferences/example/lib/main.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ class MyApp extends StatelessWidget {
2424
}
2525

2626
class SharedPreferencesDemo extends StatefulWidget {
27-
SharedPreferencesDemo({Key key}) : super(key: key);
27+
SharedPreferencesDemo({Key? key}) : super(key: key);
2828

2929
@override
3030
SharedPreferencesDemoState createState() => SharedPreferencesDemoState();
3131
}
3232

3333
class SharedPreferencesDemoState extends State<SharedPreferencesDemo> {
3434
Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
35-
Future<int> _counter;
35+
late Future<int> _counter;
3636

3737
Future<void> _incrementCounter() async {
3838
final SharedPreferences prefs = await _prefs;

packages/shared_preferences/shared_preferences/example/pubspec.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,5 @@ flutter:
2323
uses-material-design: true
2424

2525
environment:
26-
sdk: ">=2.0.0-dev.28.0 <3.0.0"
26+
sdk: ">=2.12.0-0 <3.0.0"
2727
flutter: ">=1.9.1+hotfix.2"
28-

packages/shared_preferences/shared_preferences/example/test_driver/integration_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
// @dart=2.9
6+
57
import 'dart:async';
68
import 'dart:convert';
79
import 'dart:io';

packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
// Copyright 2017 The Chromium Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
// @dart=2.9
6+
17
import 'dart:async';
28

39
import 'package:flutter_test/flutter_test.dart';

packages/shared_preferences/shared_preferences_linux/example/lib/main.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,22 @@ class MyApp extends StatelessWidget {
2424
}
2525

2626
class SharedPreferencesDemo extends StatefulWidget {
27-
SharedPreferencesDemo({Key key}) : super(key: key);
27+
SharedPreferencesDemo({Key? key}) : super(key: key);
2828

2929
@override
3030
SharedPreferencesDemoState createState() => SharedPreferencesDemoState();
3131
}
3232

3333
class SharedPreferencesDemoState extends State<SharedPreferencesDemo> {
3434
final prefs = SharedPreferencesLinux.instance;
35-
Future<int> _counter;
35+
late Future<int> _counter;
3636

3737
Future<void> _incrementCounter() async {
3838
final values = await prefs.getAll();
39-
final int counter = (values['counter'] as int ?? 0) + 1;
39+
final int counter = (values['counter'] as int? ?? 0) + 1;
4040

4141
setState(() {
42-
_counter = prefs.setValue(null, "counter", counter).then((bool success) {
42+
_counter = prefs.setValue('Int', 'counter', counter).then((bool success) {
4343
return counter;
4444
});
4545
});
@@ -49,7 +49,7 @@ class SharedPreferencesDemoState extends State<SharedPreferencesDemo> {
4949
void initState() {
5050
super.initState();
5151
_counter = prefs.getAll().then((Map<String, Object> values) {
52-
return (values['counter'] ?? 0);
52+
return (values['counter'] as int? ?? 0);
5353
});
5454
}
5555

packages/shared_preferences/shared_preferences_linux/example/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,5 @@ flutter:
2323
uses-material-design: true
2424

2525
environment:
26-
sdk: ">=2.1.0 <3.0.0"
26+
sdk: ">=2.12.0-0 <3.0.0"
2727
flutter: ">=1.12.8"

packages/shared_preferences/shared_preferences_linux/example/test_driver/integration_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
// @dart=2.9
6+
57
import 'dart:async';
68
import 'dart:convert';
79
import 'dart:io';
Lines changed: 65 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
1+
// Copyright 2017, the Chromium project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
// @dart=2.9
6+
17
import 'dart:async';
28
import 'package:flutter_test/flutter_test.dart';
3-
import 'package:shared_preferences/shared_preferences.dart';
9+
import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart';
410
import 'package:integration_test/integration_test.dart';
511

612
void main() {
713
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
814

9-
group('$SharedPreferences', () {
15+
group('SharedPreferencesMacOS', () {
1016
const Map<String, dynamic> kTestValues = <String, dynamic>{
1117
'flutter.String': 'hello world',
1218
'flutter.bool': true,
@@ -23,67 +29,81 @@ void main() {
2329
'flutter.List': <String>['baz', 'quox'],
2430
};
2531

26-
SharedPreferences preferences;
32+
SharedPreferencesStorePlatform preferences;
2733

2834
setUp(() async {
29-
preferences = await SharedPreferences.getInstance();
35+
preferences = SharedPreferencesStorePlatform.instance;
3036
});
3137

3238
tearDown(() {
3339
preferences.clear();
3440
});
3541

36-
test('reading', () async {
37-
expect(preferences.get('String'), isNull);
38-
expect(preferences.get('bool'), isNull);
39-
expect(preferences.get('int'), isNull);
40-
expect(preferences.get('double'), isNull);
41-
expect(preferences.get('List'), isNull);
42-
expect(preferences.getString('String'), isNull);
43-
expect(preferences.getBool('bool'), isNull);
44-
expect(preferences.getInt('int'), isNull);
45-
expect(preferences.getDouble('double'), isNull);
46-
expect(preferences.getStringList('List'), isNull);
42+
// Normally the app-facing package adds the prefix, but since this test
43+
// bypasses the app-facing package it needs to be manually added.
44+
String _prefixedKey(String key) {
45+
return 'flutter.$key';
46+
}
47+
48+
testWidgets('reading', (WidgetTester _) async {
49+
final Map<String, Object> values = await preferences.getAll();
50+
expect(values[_prefixedKey('String')], isNull);
51+
expect(values[_prefixedKey('bool')], isNull);
52+
expect(values[_prefixedKey('int')], isNull);
53+
expect(values[_prefixedKey('double')], isNull);
54+
expect(values[_prefixedKey('List')], isNull);
4755
});
4856

49-
test('writing', () async {
57+
testWidgets('writing', (WidgetTester _) async {
5058
await Future.wait(<Future<bool>>[
51-
preferences.setString('String', kTestValues2['flutter.String']),
52-
preferences.setBool('bool', kTestValues2['flutter.bool']),
53-
preferences.setInt('int', kTestValues2['flutter.int']),
54-
preferences.setDouble('double', kTestValues2['flutter.double']),
55-
preferences.setStringList('List', kTestValues2['flutter.List'])
59+
preferences.setValue(
60+
'String', _prefixedKey('String'), kTestValues2['flutter.String']),
61+
preferences.setValue(
62+
'Bool', _prefixedKey('bool'), kTestValues2['flutter.bool']),
63+
preferences.setValue(
64+
'Int', _prefixedKey('int'), kTestValues2['flutter.int']),
65+
preferences.setValue(
66+
'Double', _prefixedKey('double'), kTestValues2['flutter.double']),
67+
preferences.setValue(
68+
'StringList', _prefixedKey('List'), kTestValues2['flutter.List'])
5669
]);
57-
expect(preferences.getString('String'), kTestValues2['flutter.String']);
58-
expect(preferences.getBool('bool'), kTestValues2['flutter.bool']);
59-
expect(preferences.getInt('int'), kTestValues2['flutter.int']);
60-
expect(preferences.getDouble('double'), kTestValues2['flutter.double']);
61-
expect(preferences.getStringList('List'), kTestValues2['flutter.List']);
70+
final Map<String, Object> values = await preferences.getAll();
71+
expect(values[_prefixedKey('String')], kTestValues2['flutter.String']);
72+
expect(values[_prefixedKey('bool')], kTestValues2['flutter.bool']);
73+
expect(values[_prefixedKey('int')], kTestValues2['flutter.int']);
74+
expect(values[_prefixedKey('double')], kTestValues2['flutter.double']);
75+
expect(values[_prefixedKey('List')], kTestValues2['flutter.List']);
6276
});
6377

64-
test('removing', () async {
65-
const String key = 'testKey';
66-
await preferences.setString(key, kTestValues['flutter.String']);
67-
await preferences.setBool(key, kTestValues['flutter.bool']);
68-
await preferences.setInt(key, kTestValues['flutter.int']);
69-
await preferences.setDouble(key, kTestValues['flutter.double']);
70-
await preferences.setStringList(key, kTestValues['flutter.List']);
78+
testWidgets('removing', (WidgetTester _) async {
79+
final String key = _prefixedKey('testKey');
80+
await preferences.setValue('String', key, kTestValues['flutter.String']);
81+
await preferences.setValue('Bool', key, kTestValues['flutter.bool']);
82+
await preferences.setValue('Int', key, kTestValues['flutter.int']);
83+
await preferences.setValue('Double', key, kTestValues['flutter.double']);
84+
await preferences.setValue(
85+
'StringList', key, kTestValues['flutter.List']);
7186
await preferences.remove(key);
72-
expect(preferences.get('testKey'), isNull);
87+
final Map<String, Object> values = await preferences.getAll();
88+
expect(values[key], isNull);
7389
});
7490

75-
test('clearing', () async {
76-
await preferences.setString('String', kTestValues['flutter.String']);
77-
await preferences.setBool('bool', kTestValues['flutter.bool']);
78-
await preferences.setInt('int', kTestValues['flutter.int']);
79-
await preferences.setDouble('double', kTestValues['flutter.double']);
80-
await preferences.setStringList('List', kTestValues['flutter.List']);
91+
testWidgets('clearing', (WidgetTester _) async {
92+
await preferences.setValue(
93+
'String', 'String', kTestValues['flutter.String']);
94+
await preferences.setValue('Bool', 'bool', kTestValues['flutter.bool']);
95+
await preferences.setValue('Int', 'int', kTestValues['flutter.int']);
96+
await preferences.setValue(
97+
'Double', 'double', kTestValues['flutter.double']);
98+
await preferences.setValue(
99+
'StringList', 'List', kTestValues['flutter.List']);
81100
await preferences.clear();
82-
expect(preferences.getString('String'), null);
83-
expect(preferences.getBool('bool'), null);
84-
expect(preferences.getInt('int'), null);
85-
expect(preferences.getDouble('double'), null);
86-
expect(preferences.getStringList('List'), null);
101+
final Map<String, Object> values = await preferences.getAll();
102+
expect(values['String'], null);
103+
expect(values['bool'], null);
104+
expect(values['int'], null);
105+
expect(values['double'], null);
106+
expect(values['List'], null);
87107
});
88108
});
89109
}

packages/shared_preferences/shared_preferences_macos/example/lib/main.dart

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import 'dart:async';
88

99
import 'package:flutter/material.dart';
10-
import 'package:shared_preferences/shared_preferences.dart';
10+
import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart';
1111

1212
void main() {
1313
runApp(MyApp());
@@ -24,22 +24,28 @@ class MyApp extends StatelessWidget {
2424
}
2525

2626
class SharedPreferencesDemo extends StatefulWidget {
27-
SharedPreferencesDemo({Key key}) : super(key: key);
27+
SharedPreferencesDemo({Key? key}) : super(key: key);
2828

2929
@override
3030
SharedPreferencesDemoState createState() => SharedPreferencesDemoState();
3131
}
3232

3333
class SharedPreferencesDemoState extends State<SharedPreferencesDemo> {
34-
Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
35-
Future<int> _counter;
34+
SharedPreferencesStorePlatform _prefs =
35+
SharedPreferencesStorePlatform.instance;
36+
late Future<int> _counter;
37+
38+
// Includes the prefix because this is using the platform interface directly,
39+
// but the prefix (which the native code assumes is present) is added by the
40+
// app-facing package.
41+
static const String _prefKey = 'flutter.counter';
3642

3743
Future<void> _incrementCounter() async {
38-
final SharedPreferences prefs = await _prefs;
39-
final int counter = (prefs.getInt('counter') ?? 0) + 1;
44+
final Map<String, Object> values = await _prefs.getAll();
45+
final int counter = ((values[_prefKey] as int?) ?? 0) + 1;
4046

4147
setState(() {
42-
_counter = prefs.setInt("counter", counter).then((bool success) {
48+
_counter = _prefs.setValue('Int', _prefKey, counter).then((bool success) {
4349
return counter;
4450
});
4551
});
@@ -48,8 +54,8 @@ class SharedPreferencesDemoState extends State<SharedPreferencesDemo> {
4854
@override
4955
void initState() {
5056
super.initState();
51-
_counter = _prefs.then((SharedPreferences prefs) {
52-
return (prefs.getInt('counter') ?? 0);
57+
_counter = _prefs.getAll().then((Map<String, Object> values) {
58+
return (values[_prefKey] as int?) ?? 0;
5359
});
5460
}
5561

0 commit comments

Comments
 (0)