enable lint prefer_void_to_null (#23174)
* enable lint prefer_void_to_null
* replace last Null by void
diff --git a/README.md b/README.md
index 07ad72b..0c6095f 100644
--- a/README.md
+++ b/README.md
@@ -100,7 +100,7 @@
Accessing platform features is easy. Here is a snippet from our <a href="https://github.com/flutter/flutter/tree/master/examples/platform_channel">interop example</a>:
```dart
-Future<Null> getBatteryLevel() async {
+Future<void> getBatteryLevel() async {
var batteryLevel = 'unknown';
try {
int result = await methodChannel.invokeMethod('getBatteryLevel');
diff --git a/analysis_options.yaml b/analysis_options.yaml
index 5f00205..87e480c 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -136,7 +136,7 @@
- prefer_iterable_whereType
- prefer_single_quotes
- prefer_typing_uninitialized_variables
- # - prefer_void_to_null # not yet tested
+ - prefer_void_to_null
# - public_member_api_docs # enabled on a case-by-case basis; see e.g. packages/analysis_options.yaml
- recursive_getters
- slash_for_doc_comments
diff --git a/dev/bots/analyze-sample-code.dart b/dev/bots/analyze-sample-code.dart
index 0ec2fc3..9e04582 100644
--- a/dev/bots/analyze-sample-code.dart
+++ b/dev/bots/analyze-sample-code.dart
@@ -327,7 +327,7 @@
sections.add(Section(line, 'dynamic expression$_expressionId = ', block.toList(), ';'));
} else if (block.first.startsWith('await ')) {
_expressionId += 1;
- sections.add(Section(line, 'Future<Null> expression$_expressionId() async { ', block.toList(), ' }'));
+ sections.add(Section(line, 'Future<void> expression$_expressionId() async { ', block.toList(), ' }'));
} else if (block.first.startsWith('class ') || block.first.startsWith('enum ')) {
sections.add(Section(line, null, block.toList(), null));
} else if ((block.first.startsWith('_') || block.first.startsWith('final ')) && block.first.contains(' = ')) {
diff --git a/packages/flutter/lib/src/animation/animation_controller.dart b/packages/flutter/lib/src/animation/animation_controller.dart
index 587a541..ea1cb73 100644
--- a/packages/flutter/lib/src/animation/animation_controller.dart
+++ b/packages/flutter/lib/src/animation/animation_controller.dart
@@ -176,7 +176,7 @@
/// controllers using Dart's asynchronous syntax for awaiting [Future] objects:
///
/// ```dart
-/// Future<Null> fadeOutAndUpdateState() async {
+/// Future<void> fadeOutAndUpdateState() async {
/// try {
/// await fadeAnimationController.forward().orCancel;
/// await sizeAnimationController.forward().orCancel;
diff --git a/packages/flutter/lib/src/cupertino/tab_scaffold.dart b/packages/flutter/lib/src/cupertino/tab_scaffold.dart
index dcc36ce..18d6687 100644
--- a/packages/flutter/lib/src/cupertino/tab_scaffold.dart
+++ b/packages/flutter/lib/src/cupertino/tab_scaffold.dart
@@ -45,7 +45,7 @@
/// child: const Text('Next page'),
/// onPressed: () {
/// Navigator.of(context).push(
-/// CupertinoPageRoute<Null>(
+/// CupertinoPageRoute<void>(
/// builder: (BuildContext context) {
/// return CupertinoPageScaffold(
/// navigationBar: CupertinoNavigationBar(
diff --git a/packages/flutter/lib/src/foundation/binding.dart b/packages/flutter/lib/src/foundation/binding.dart
index 56555d3..7b16057 100644
--- a/packages/flutter/lib/src/foundation/binding.dart
+++ b/packages/flutter/lib/src/foundation/binding.dart
@@ -178,7 +178,7 @@
assert(callback != null);
_lockCount += 1;
final Future<void> future = callback();
- assert(future != null, 'The lockEvents() callback returned null; it should return a Future<Null> that completes when the lock is to expire.');
+ assert(future != null, 'The lockEvents() callback returned null; it should return a Future<void> that completes when the lock is to expire.');
future.whenComplete(() {
_lockCount -= 1;
if (!locked) {
diff --git a/packages/flutter/lib/src/material/dialog.dart b/packages/flutter/lib/src/material/dialog.dart
index 2059c74..4ed65a5 100644
--- a/packages/flutter/lib/src/material/dialog.dart
+++ b/packages/flutter/lib/src/material/dialog.dart
@@ -121,8 +121,8 @@
/// and returns a [Future] that completes when the dialog is dismissed.
///
/// ```dart
-/// Future<Null> _neverSatisfied() async {
-/// return showDialog<Null>(
+/// Future<void> _neverSatisfied() async {
+/// return showDialog<void>(
/// context: context,
/// barrierDismissible: false, // user must tap button!
/// builder: (BuildContext context) {
@@ -390,7 +390,7 @@
/// that doesn't mention every value in the enum.
///
/// ```dart
-/// Future<Null> _askedToLead() async {
+/// Future<void> _askedToLead() async {
/// switch (await showDialog<Department>(
/// context: context,
/// builder: (BuildContext context) {
diff --git a/packages/flutter/lib/src/material/popup_menu.dart b/packages/flutter/lib/src/material/popup_menu.dart
index 9685f55..92bd4a9 100644
--- a/packages/flutter/lib/src/material/popup_menu.dart
+++ b/packages/flutter/lib/src/material/popup_menu.dart
@@ -93,6 +93,7 @@
/// * [showMenu], a method to dynamically show a popup menu at a given location.
/// * [PopupMenuButton], an [IconButton] that automatically shows a menu when
/// it is tapped.
+// ignore: prefer_void_to_null, https://github.com/dart-lang/sdk/issues/34416
class PopupMenuDivider extends PopupMenuEntry<Null> {
/// Creates a horizontal divider for a popup menu.
///
@@ -106,6 +107,7 @@
final double height;
@override
+ // ignore: prefer_void_to_null, https://github.com/dart-lang/sdk/issues/34416
bool represents(Null value) => false;
@override
diff --git a/packages/flutter/lib/src/widgets/framework.dart b/packages/flutter/lib/src/widgets/framework.dart
index 55ef6bb..b5e2ae0 100644
--- a/packages/flutter/lib/src/widgets/framework.dart
+++ b/packages/flutter/lib/src/widgets/framework.dart
@@ -1076,14 +1076,13 @@
/// the increment is wrapped in the `setState`:
///
/// ```dart
- /// Future<Null> _incrementCounter() async {
+ /// Future<void> _incrementCounter() async {
/// setState(() {
/// _counter++;
/// });
/// Directory directory = await getApplicationDocumentsDirectory();
/// final String dirName = directory.path;
/// await File('$dir/counter.txt').writeAsString('$_counter');
- /// return null;
/// }
/// ```
///
diff --git a/packages/flutter/lib/src/widgets/localizations.dart b/packages/flutter/lib/src/widgets/localizations.dart
index e960ec3..d2c1f44 100644
--- a/packages/flutter/lib/src/widgets/localizations.dart
+++ b/packages/flutter/lib/src/widgets/localizations.dart
@@ -14,7 +14,7 @@
// Examples can assume:
// class Intl { static String message(String s, { String name, String locale }) => ''; }
-// Future<Null> initializeMessages(String locale) => null;
+// Future<void> initializeMessages(String locale) => null;
// Used by loadAll() to record LocalizationsDelegate.load() futures we're
// waiting for.
@@ -308,7 +308,7 @@
///
/// static Future<MyLocalizations> load(Locale locale) {
/// return initializeMessages(locale.toString())
-/// .then((Null _) {
+/// .then((void _) {
/// return MyLocalizations(locale);
/// });
/// }
diff --git a/packages/flutter/test/widgets/gesture_detector_test.dart b/packages/flutter/test/widgets/gesture_detector_test.dart
index 36fe286..2b4f469 100644
--- a/packages/flutter/test/widgets/gesture_detector_test.dart
+++ b/packages/flutter/test/widgets/gesture_detector_test.dart
@@ -334,7 +334,7 @@
),
);
- Future<Null> longPress(Duration timeout) async {
+ Future<void> longPress(Duration timeout) async {
final TestGesture gesture = await tester.startGesture(const Offset(400.0, 50.0));
await tester.pump(timeout);
await gesture.up();
diff --git a/packages/flutter_test/lib/src/test_async_utils.dart b/packages/flutter_test/lib/src/test_async_utils.dart
index 6307770..2a9c806 100644
--- a/packages/flutter_test/lib/src/test_async_utils.dart
+++ b/packages/flutter_test/lib/src/test_async_utils.dart
@@ -40,7 +40,7 @@
/// in a call to TestAsyncUtils.guard(), as follows:
///
/// ```dart
-/// Future<Null> myTestFunction() => TestAsyncUtils.guard(() async {
+/// Future<void> myTestFunction() => TestAsyncUtils.guard(() async {
/// // ...
/// });
/// ```