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 {
 ///   // ...
 /// });
 /// ```