Re-enable missing_return (#20844)

diff --git a/analysis_options.yaml b/analysis_options.yaml
index b797439..5b91937 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -26,9 +26,8 @@
   errors:
     # treat missing required parameters as a warning (not a hint)
     missing_required_param: warning
-    # TODO(devoncarew): https://github.com/flutter/flutter/issues/20114
     # treat missing returns as a warning (not a hint)
-    missing_return: ignore
+    missing_return: warning
     # allow having TODOs in the code
     todo: ignore
   exclude:
diff --git a/dev/bots/test.dart b/dev/bots/test.dart
index 0946081..3fd6427 100644
--- a/dev/bots/test.dart
+++ b/dev/bots/test.dart
@@ -600,6 +600,7 @@
         }
         return '  $name: uses \'package:test\' directly';
       }
+      return null;
     })
     .where((String line) => line != null)
     .toList()
diff --git a/dev/devicelab/lib/tasks/microbenchmarks.dart b/dev/devicelab/lib/tasks/microbenchmarks.dart
index b66b4d2..54d98fb 100644
--- a/dev/devicelab/lib/tasks/microbenchmarks.dart
+++ b/dev/devicelab/lib/tasks/microbenchmarks.dart
@@ -141,7 +141,7 @@
       jsonBuf.writeln(line.substring(line.indexOf(jsonPrefix) + jsonPrefix.length));
   });
 
-  process.exitCode.then<int>((int code) async {
+  process.exitCode.then<void>((int code) async {
     await Future.wait<void>(<Future<void>>[
       stdoutSub.cancel(),
       stderrSub.cancel(),
diff --git a/dev/tools/gen_date_localizations.dart b/dev/tools/gen_date_localizations.dart
index e70d923..0d93333 100644
--- a/dev/tools/gen_date_localizations.dart
+++ b/dev/tools/gen_date_localizations.dart
@@ -58,6 +58,7 @@
       (String line) => line.startsWith('intl:'),
       orElse: () {
         exitWithError('intl dependency not found in ${dotPackagesFile.path}');
+        return null; // unreachable
       },
     )
     .split(':')
diff --git a/examples/flutter_gallery/lib/demo/cupertino/cupertino_navigation_demo.dart b/examples/flutter_gallery/lib/demo/cupertino/cupertino_navigation_demo.dart
index 86b6588..4554480 100644
--- a/examples/flutter_gallery/lib/demo/cupertino/cupertino_navigation_demo.dart
+++ b/examples/flutter_gallery/lib/demo/cupertino/cupertino_navigation_demo.dart
@@ -71,6 +71,7 @@
             ],
           ),
           tabBuilder: (BuildContext context, int index) {
+            assert(index >= 0 && index <= 2);
             switch (index) {
               case 0:
                 return new CupertinoTabView(
@@ -95,8 +96,8 @@
                   defaultTitle: 'Account',
                 );
                 break;
-              default:
             }
+            return null;
           },
         ),
       ),
diff --git a/examples/flutter_gallery/lib/demo/material/scrollable_tabs_demo.dart b/examples/flutter_gallery/lib/demo/material/scrollable_tabs_demo.dart
index e394760..e6d0dd9 100644
--- a/examples/flutter_gallery/lib/demo/material/scrollable_tabs_demo.dart
+++ b/examples/flutter_gallery/lib/demo/material/scrollable_tabs_demo.dart
@@ -155,7 +155,8 @@
           controller: _controller,
           isScrollable: true,
           indicator: getIndicator(),
-          tabs: _allPages.map((_Page page) {
+          tabs: _allPages.map<Tab>((_Page page) {
+            assert(_demoStyle != null);
             switch (_demoStyle) {
               case TabsDemoStyle.iconsAndText:
                 return new Tab(text: page.text, icon: new Icon(page.icon));
@@ -164,6 +165,7 @@
               case TabsDemoStyle.textOnly:
                 return new Tab(text: page.text);
             }
+            return null;
           }).toList(),
         ),
       ),
diff --git a/examples/flutter_gallery/test_driver/transitions_perf_test.dart b/examples/flutter_gallery/test_driver/transitions_perf_test.dart
index a656406..8e534ef 100644
--- a/examples/flutter_gallery/test_driver/transitions_perf_test.dart
+++ b/examples/flutter_gallery/test_driver/transitions_perf_test.dart
@@ -156,7 +156,7 @@
       await driver.tap(demoItem); // Launch the demo
 
       if (kUnsynchronizedDemos.contains(demo)) {
-        await driver.runUnsynchronized<Future<Null>>(() async {
+        await driver.runUnsynchronized<void>(() async {
           await driver.tap(find.byTooltip('Back'));
         });
       } else {
diff --git a/examples/layers/test/sector_test.dart b/examples/layers/test/sector_test.dart
index 693898f..3903e9d 100644
--- a/examples/layers/test/sector_test.dart
+++ b/examples/layers/test/sector_test.dart
@@ -12,7 +12,7 @@
     expect(const SectorConstraints().isTight, isFalse);
   });
 
-  testWidgets('Sector Sixes', (WidgetTester tester) {
-    tester.pumpWidget(new SectorApp());
+  testWidgets('Sector Sixes', (WidgetTester tester) async {
+    await tester.pumpWidget(new SectorApp());
   });
 }
diff --git a/examples/layers/test/smoketests/lib/main_test.dart b/examples/layers/test/smoketests/lib/main_test.dart
index 5b859b1..c0ed8f1 100644
--- a/examples/layers/test/smoketests/lib/main_test.dart
+++ b/examples/layers/test/smoketests/lib/main_test.dart
@@ -6,7 +6,7 @@
 import 'package:flutter_test/flutter_test.dart';
 
 void main() {
-  testWidgets('layers smoketest for lib/main.dart', (WidgetTester tester) {
+  testWidgets('layers smoketest for lib/main.dart', (WidgetTester tester) async {
     demo.main();
   });
 }
diff --git a/examples/layers/test/smoketests/services/isolate_test.dart b/examples/layers/test/smoketests/services/isolate_test.dart
index 27b98a8..789c528 100644
--- a/examples/layers/test/smoketests/services/isolate_test.dart
+++ b/examples/layers/test/smoketests/services/isolate_test.dart
@@ -7,7 +7,7 @@
 import '../../../services/isolate.dart' as demo;
 
 void main() {
-  testWidgets('layers smoketest for services/isolate.dart', (WidgetTester tester) {
+  testWidgets('layers smoketest for services/isolate.dart', (WidgetTester tester) async {
     demo.main();
   });
 }
diff --git a/examples/layers/test/smoketests/services/lifecycle_test.dart b/examples/layers/test/smoketests/services/lifecycle_test.dart
index c8290b0..5d1b7c3 100644
--- a/examples/layers/test/smoketests/services/lifecycle_test.dart
+++ b/examples/layers/test/smoketests/services/lifecycle_test.dart
@@ -7,7 +7,7 @@
 import '../../../services/lifecycle.dart' as demo;
 
 void main() {
-  testWidgets('layers smoketest for services/lifecycle.dart', (WidgetTester tester) {
+  testWidgets('layers smoketest for services/lifecycle.dart', (WidgetTester tester) async {
     demo.main();
   });
 }
diff --git a/examples/layers/test/smoketests/widgets/custom_render_box_test.dart b/examples/layers/test/smoketests/widgets/custom_render_box_test.dart
index 0e72437..1530bab 100644
--- a/examples/layers/test/smoketests/widgets/custom_render_box_test.dart
+++ b/examples/layers/test/smoketests/widgets/custom_render_box_test.dart
@@ -7,7 +7,7 @@
 import '../../../widgets/custom_render_box.dart' as demo;
 
 void main() {
-  testWidgets('layers smoketest for widgets/custom_render_box.dart', (WidgetTester tester) {
+  testWidgets('layers smoketest for widgets/custom_render_box.dart', (WidgetTester tester) async {
     demo.main();
   });
 }
diff --git a/examples/layers/test/smoketests/widgets/gestures_test.dart b/examples/layers/test/smoketests/widgets/gestures_test.dart
index ed6dc33..92327cc 100644
--- a/examples/layers/test/smoketests/widgets/gestures_test.dart
+++ b/examples/layers/test/smoketests/widgets/gestures_test.dart
@@ -7,7 +7,7 @@
 import '../../../widgets/gestures.dart' as demo;
 
 void main() {
-  testWidgets('layers smoketest for widgets/gestures.dart', (WidgetTester tester) {
+  testWidgets('layers smoketest for widgets/gestures.dart', (WidgetTester tester) async {
     demo.main();
   });
 }
diff --git a/examples/layers/test/smoketests/widgets/hello_world_test.dart b/examples/layers/test/smoketests/widgets/hello_world_test.dart
index 031c01d..581d79b 100644
--- a/examples/layers/test/smoketests/widgets/hello_world_test.dart
+++ b/examples/layers/test/smoketests/widgets/hello_world_test.dart
@@ -7,7 +7,7 @@
 import '../../../widgets/hello_world.dart' as demo;
 
 void main() {
-  testWidgets('layers smoketest for widgets/hello_world.dart', (WidgetTester tester) {
+  testWidgets('layers smoketest for widgets/hello_world.dart', (WidgetTester tester) async {
     demo.main();
   });
 }
diff --git a/examples/layers/test/smoketests/widgets/media_query_test.dart b/examples/layers/test/smoketests/widgets/media_query_test.dart
index fa70edf..d62c1a0 100644
--- a/examples/layers/test/smoketests/widgets/media_query_test.dart
+++ b/examples/layers/test/smoketests/widgets/media_query_test.dart
@@ -7,7 +7,7 @@
 import '../../../widgets/media_query.dart' as demo;
 
 void main() {
-  testWidgets('layers smoketest for widgets/media_query.dart', (WidgetTester tester) {
+  testWidgets('layers smoketest for widgets/media_query.dart', (WidgetTester tester) async {
     demo.main();
   });
 }
diff --git a/examples/layers/test/smoketests/widgets/sectors_test.dart b/examples/layers/test/smoketests/widgets/sectors_test.dart
index a5f596a..15eab9a 100644
--- a/examples/layers/test/smoketests/widgets/sectors_test.dart
+++ b/examples/layers/test/smoketests/widgets/sectors_test.dart
@@ -7,7 +7,7 @@
 import '../../../widgets/sectors.dart' as demo;
 
 void main() {
-  testWidgets('layers smoketest for widgets/sectors.dart', (WidgetTester tester) {
+  testWidgets('layers smoketest for widgets/sectors.dart', (WidgetTester tester) async {
     demo.main();
   });
 }
diff --git a/examples/layers/test/smoketests/widgets/spinning_square_test.dart b/examples/layers/test/smoketests/widgets/spinning_square_test.dart
index 01588ef..80beb76 100644
--- a/examples/layers/test/smoketests/widgets/spinning_square_test.dart
+++ b/examples/layers/test/smoketests/widgets/spinning_square_test.dart
@@ -7,7 +7,7 @@
 import '../../../widgets/spinning_square.dart' as demo;
 
 void main() {
-  testWidgets('layers smoketest for widgets/spinning_square.dart', (WidgetTester tester) {
+  testWidgets('layers smoketest for widgets/spinning_square.dart', (WidgetTester tester) async {
     demo.main();
   });
 }
diff --git a/examples/layers/test/smoketests/widgets/styled_text_test.dart b/examples/layers/test/smoketests/widgets/styled_text_test.dart
index ed29943..874880f 100644
--- a/examples/layers/test/smoketests/widgets/styled_text_test.dart
+++ b/examples/layers/test/smoketests/widgets/styled_text_test.dart
@@ -7,7 +7,7 @@
 import '../../../widgets/styled_text.dart' as demo;
 
 void main() {
-  testWidgets('layers smoketest for widgets/styled_text.dart', (WidgetTester tester) {
+  testWidgets('layers smoketest for widgets/styled_text.dart', (WidgetTester tester) async {
     demo.main();
   });
 }
diff --git a/packages/flutter/lib/analysis_options_user.yaml b/packages/flutter/lib/analysis_options_user.yaml
index bb33458..e7c5d8b 100644
--- a/packages/flutter/lib/analysis_options_user.yaml
+++ b/packages/flutter/lib/analysis_options_user.yaml
@@ -26,9 +26,6 @@
   errors:
     # treat missing required parameters as a warning (not a hint)
     missing_required_param: warning
-    # treat missing returns as a warning (not a hint)
-    # TODO(ianh): https://github.com/flutter/flutter/issues/20114
-    missing_return: ignore
     # allow having TODOs in the code
     todo: ignore
 
diff --git a/packages/flutter/lib/src/services/platform_channel.dart b/packages/flutter/lib/src/services/platform_channel.dart
index 3dcffd9..dee5be5 100644
--- a/packages/flutter/lib/src/services/platform_channel.dart
+++ b/packages/flutter/lib/src/services/platform_channel.dart
@@ -313,6 +313,11 @@
   ///
   /// This is intended for testing. Method calls intercepted in this manner are
   /// not sent to platform plugins.
+  ///
+  /// The provided `handler` must return a `Future` that completes with the
+  /// return value of the call. The value will be encoded using
+  /// [MethodCodec.encodeSuccessEnvelope], to act as if platform plugin had
+  /// returned that value.
   void setMockMethodCallHandler(Future<dynamic> handler(MethodCall call)) {
     BinaryMessages.setMockMessageHandler(
       name,
@@ -413,6 +418,7 @@
             controller.addError(e);
           }
         }
+        return null;
       });
       try {
         await methodChannel.invokeMethod('listen', arguments);
diff --git a/packages/flutter/lib/src/services/platform_views.dart b/packages/flutter/lib/src/services/platform_views.dart
index 97f00b4..f971458 100644
--- a/packages/flutter/lib/src/services/platform_views.dart
+++ b/packages/flutter/lib/src/services/platform_views.dart
@@ -494,14 +494,14 @@
   }
 
   static int _getAndroidDirection(TextDirection direction) {
+    assert(direction != null);
     switch (direction) {
       case TextDirection.ltr:
         return kAndroidLayoutDirectionLtr;
       case TextDirection.rtl:
         return kAndroidLayoutDirectionRtl;
-      default:
-        throw new UnsupportedError('Direction $direction is not supported');
     }
+    return null;
   }
 
   /// Sends an Android [MotionEvent](https://developer.android.com/reference/android/view/MotionEvent)
diff --git a/packages/flutter/lib/src/widgets/async.dart b/packages/flutter/lib/src/widgets/async.dart
index 3553bc2..455241b 100644
--- a/packages/flutter/lib/src/widgets/async.dart
+++ b/packages/flutter/lib/src/widgets/async.dart
@@ -359,9 +359,11 @@
 ///       case ConnectionState.active: return new Text('\$${snapshot.data}');
 ///       case ConnectionState.done: return new Text('\$${snapshot.data} (closed)');
 ///     }
+///     return null; // unreachable
 ///   },
 /// )
 /// ```
+// TODO(ianh): remove unreachable code above once https://github.com/dart-lang/linter/issues/1141 is fixed
 class StreamBuilder<T> extends StreamBuilderBase<T, AsyncSnapshot<T>> {
   /// Creates a new [StreamBuilder] that builds itself based on the latest
   /// snapshot of interaction with the specified [stream] and whose build
@@ -491,9 +493,11 @@
 ///           return new Text('Error: ${snapshot.error}');
 ///         return new Text('Result: ${snapshot.data}');
 ///     }
+///     return null; // unreachable
 ///   },
 /// )
 /// ```
+// TODO(ianh): remove unreachable code above once https://github.com/dart-lang/linter/issues/1141 is fixed
 class FutureBuilder<T> extends StatefulWidget {
   /// Creates a widget that builds itself based on the latest snapshot of
   /// interaction with a [Future].
diff --git a/packages/flutter/lib/src/widgets/heroes.dart b/packages/flutter/lib/src/widgets/heroes.dart
index d936656..5e674db 100644
--- a/packages/flutter/lib/src/widgets/heroes.dart
+++ b/packages/flutter/lib/src/widgets/heroes.dart
@@ -321,12 +321,16 @@
     assert(!_aborted);
     assert(() {
       final Animation<double> initial = initialManifest.animation;
-      switch (initialManifest.type) {
+      assert(initial != null);
+      final _HeroFlightType type = initialManifest.type;
+      assert(type != null);
+      switch (type) {
         case _HeroFlightType.pop:
           return initial.value == 1.0 && initial.status == AnimationStatus.reverse;
         case _HeroFlightType.push:
           return initial.value == 0.0 && initial.status == AnimationStatus.forward;
       }
+      return null;
     }());
 
     manifest = initialManifest;
diff --git a/packages/flutter/test/cupertino/tab_test.dart b/packages/flutter/test/cupertino/tab_test.dart
index c162d0d..0e8b675 100644
--- a/packages/flutter/test/cupertino/tab_test.dart
+++ b/packages/flutter/test/cupertino/tab_test.dart
@@ -71,6 +71,7 @@
                 }
               );
             }
+            return null;
           },
         ),
       ),
@@ -86,6 +87,7 @@
         home: new CupertinoTabView(
           onUnknownRoute: (RouteSettings settings) {
             unknownForRouteCalled = settings.name;
+            return null;
           },
         ),
       ),
diff --git a/packages/flutter/test/gestures/debug_test.dart b/packages/flutter/test/gestures/debug_test.dart
index 452283d..2f0ab53 100644
--- a/packages/flutter/test/gestures/debug_test.dart
+++ b/packages/flutter/test/gestures/debug_test.dart
@@ -7,7 +7,7 @@
 import 'package:flutter_test/flutter_test.dart';
 
 void main() {
-  testWidgets('debugPrintGestureArenaDiagnostics', (WidgetTester tester) {
+  testWidgets('debugPrintGestureArenaDiagnostics', (WidgetTester tester) async {
     PointerEvent event;
     debugPrintGestureArenaDiagnostics = true;
     final DebugPrintCallback oldCallback = debugPrint;
@@ -53,7 +53,7 @@
     debugPrint = oldCallback;
   });
 
-  testWidgets('debugPrintRecognizerCallbacksTrace', (WidgetTester tester) {
+  testWidgets('debugPrintRecognizerCallbacksTrace', (WidgetTester tester) async {
     PointerEvent event;
     debugPrintRecognizerCallbacksTrace = true;
     final DebugPrintCallback oldCallback = debugPrint;
@@ -95,7 +95,7 @@
     debugPrint = oldCallback;
   });
 
-  testWidgets('debugPrintGestureArenaDiagnostics and debugPrintRecognizerCallbacksTrace', (WidgetTester tester) {
+  testWidgets('debugPrintGestureArenaDiagnostics and debugPrintRecognizerCallbacksTrace', (WidgetTester tester) async {
     PointerEvent event;
     debugPrintGestureArenaDiagnostics = true;
     debugPrintRecognizerCallbacksTrace = true;
diff --git a/packages/flutter/test/material/app_test.dart b/packages/flutter/test/material/app_test.dart
index b611d2d..5307e25 100644
--- a/packages/flutter/test/material/app_test.dart
+++ b/packages/flutter/test/material/app_test.dart
@@ -368,9 +368,11 @@
       new MaterialApp(
         onGenerateRoute: (RouteSettings settings) {
           log.add('onGenerateRoute ${settings.name}');
+          return null;
         },
         onUnknownRoute: (RouteSettings settings) {
           log.add('onUnknownRoute ${settings.name}');
+          return null;
         },
       )
     );
diff --git a/packages/flutter/test/material/checkbox_test.dart b/packages/flutter/test/material/checkbox_test.dart
index 27ccfd5..4fea49f 100644
--- a/packages/flutter/test/material/checkbox_test.dart
+++ b/packages/flutter/test/material/checkbox_test.dart
@@ -250,7 +250,7 @@
   testWidgets('has semantic events', (WidgetTester tester) async {
     dynamic semanticEvent;
     bool checkboxValue = false;
-    SystemChannels.accessibility.setMockMessageHandler((dynamic message) {
+    SystemChannels.accessibility.setMockMessageHandler((dynamic message) async {
       semanticEvent = message;
     });
     final SemanticsTester semanticsTester = new SemanticsTester(tester);
diff --git a/packages/flutter/test/material/feedback_test.dart b/packages/flutter/test/material/feedback_test.dart
index f9926cd..d94cfc0 100644
--- a/packages/flutter/test/material/feedback_test.dart
+++ b/packages/flutter/test/material/feedback_test.dart
@@ -29,7 +29,7 @@
 
     setUp(() {
       semanticEvents = <Map<String, Object>>[];
-      SystemChannels.accessibility.setMockMessageHandler((dynamic message) {
+      SystemChannels.accessibility.setMockMessageHandler((dynamic message) async {
         final Map<dynamic, dynamic> typedMessage = message;
         semanticEvents.add(typedMessage.cast<String, Object>());
       });
diff --git a/packages/flutter/test/material/feedback_tester.dart b/packages/flutter/test/material/feedback_tester.dart
index 6db1743..6397f03 100644
--- a/packages/flutter/test/material/feedback_tester.dart
+++ b/packages/flutter/test/material/feedback_tester.dart
@@ -10,7 +10,7 @@
 /// cannot be used in combination with other classes that do the same.
 class FeedbackTester {
   FeedbackTester() {
-    SystemChannels.platform.setMockMethodCallHandler((MethodCall methodCall) {
+    SystemChannels.platform.setMockMethodCallHandler((MethodCall methodCall) async {
       if (methodCall.method == 'HapticFeedback.vibrate')
         _hapticCount++;
       if (methodCall.method == 'SystemSound.play' &&
diff --git a/packages/flutter/test/material/radio_test.dart b/packages/flutter/test/material/radio_test.dart
index 8347437..81619fe 100644
--- a/packages/flutter/test/material/radio_test.dart
+++ b/packages/flutter/test/material/radio_test.dart
@@ -216,7 +216,7 @@
     final Key key = new UniqueKey();
     dynamic semanticEvent;
     int radioValue = 2;
-    SystemChannels.accessibility.setMockMessageHandler((dynamic message) {
+    SystemChannels.accessibility.setMockMessageHandler((dynamic message) async {
       semanticEvent = message;
     });
 
diff --git a/packages/flutter/test/material/refresh_indicator_test.dart b/packages/flutter/test/material/refresh_indicator_test.dart
index fe59537..002c800 100644
--- a/packages/flutter/test/material/refresh_indicator_test.dart
+++ b/packages/flutter/test/material/refresh_indicator_test.dart
@@ -358,7 +358,7 @@
         home: new RefreshIndicator(
           onRefresh: () {
             refreshCalled = true;
-            // Missing a returned Future value here.
+            return null; // Missing a returned Future value here, should cause framework to throw.
           },
           child: new ListView(
             physics: const AlwaysScrollableScrollPhysics(),
diff --git a/packages/flutter/test/material/switch_test.dart b/packages/flutter/test/material/switch_test.dart
index a498960..c2421ff 100644
--- a/packages/flutter/test/material/switch_test.dart
+++ b/packages/flutter/test/material/switch_test.dart
@@ -274,7 +274,7 @@
   testWidgets('switch has semantic events', (WidgetTester tester) async {
     dynamic semanticEvent;
     bool value = false;
-    SystemChannels.accessibility.setMockMessageHandler((dynamic message) {
+    SystemChannels.accessibility.setMockMessageHandler((dynamic message) async {
       semanticEvent = message;
     });
     final SemanticsTester semanticsTester = new SemanticsTester(tester);
@@ -318,7 +318,7 @@
   testWidgets('switch sends semantic events from parent if fully merged', (WidgetTester tester) async {
     dynamic semanticEvent;
     bool value = false;
-    SystemChannels.accessibility.setMockMessageHandler((dynamic message) {
+    SystemChannels.accessibility.setMockMessageHandler((dynamic message) async {
       semanticEvent = message;
     });
     final SemanticsTester semanticsTester = new SemanticsTester(tester);
diff --git a/packages/flutter/test/material/tooltip_test.dart b/packages/flutter/test/material/tooltip_test.dart
index bfaf395..097eaba 100644
--- a/packages/flutter/test/material/tooltip_test.dart
+++ b/packages/flutter/test/material/tooltip_test.dart
@@ -679,7 +679,7 @@
 
   testWidgets('has semantic events', (WidgetTester tester) async {
     final List<dynamic> semanticEvents = <dynamic>[];
-    SystemChannels.accessibility.setMockMessageHandler((dynamic message) {
+    SystemChannels.accessibility.setMockMessageHandler((dynamic message) async {
       semanticEvents.add(message);
     });
     final SemanticsTester semantics = new SemanticsTester(tester);
diff --git a/packages/flutter/test/services/platform_messages_test.dart b/packages/flutter/test/services/platform_messages_test.dart
index 278bcb7..969de60 100644
--- a/packages/flutter/test/services/platform_messages_test.dart
+++ b/packages/flutter/test/services/platform_messages_test.dart
@@ -13,6 +13,7 @@
 
     BinaryMessages.setMockMessageHandler('test1', (ByteData message) async {
       log.add(message);
+      return null;
     });
 
     final ByteData message = new ByteData(2)..setUint16(0, 0xABCD);
diff --git a/packages/flutter/test/widgets/dispose_ancestor_lookup_test.dart b/packages/flutter/test/widgets/dispose_ancestor_lookup_test.dart
index e894a43..91e16cb 100644
--- a/packages/flutter/test/widgets/dispose_ancestor_lookup_test.dart
+++ b/packages/flutter/test/widgets/dispose_ancestor_lookup_test.dart
@@ -98,7 +98,7 @@
     await tester.pumpWidget(
       new TestWidget((BuildContext context) {
         disposeCalled = true;
-        context.visitAncestorElements((Element element) { });
+        context.visitAncestorElements((Element element) => true);
       }),
     );
     await tester.pumpWidget(new Container());
diff --git a/packages/flutter/test/widgets/editable_text_test.dart b/packages/flutter/test/widgets/editable_text_test.dart
index ccf876e..ae16a9e 100644
--- a/packages/flutter/test/widgets/editable_text_test.dart
+++ b/packages/flutter/test/widgets/editable_text_test.dart
@@ -788,7 +788,7 @@
 
     // Verify TextInput.setEditingState is fired with updated text when controller is replaced.
     final List<MethodCall> log = <MethodCall>[];
-    SystemChannels.textInput.setMockMethodCallHandler((MethodCall methodCall) {
+    SystemChannels.textInput.setMockMethodCallHandler((MethodCall methodCall) async {
       log.add(methodCall);
     });
     setState(() {
diff --git a/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart b/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart
index 2eb88f4..013ebb1 100644
--- a/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart
+++ b/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart
@@ -1027,9 +1027,9 @@
           textDirection: TextDirection.ltr,
           child: new NotificationListener<ScrollNotification>(
             onNotification: (ScrollNotification notification) {
-              if (notification is ScrollUpdateNotification) {
+              if (notification is ScrollUpdateNotification)
                 scrolledPositions.add(notification.metrics.pixels);
-              }
+              return false;
             },
             child: new ListWheelScrollView(
               controller: controller,
@@ -1078,9 +1078,9 @@
           textDirection: TextDirection.ltr,
           child: new NotificationListener<ScrollNotification>(
             onNotification: (ScrollNotification notification) {
-              if (notification is ScrollUpdateNotification) {
+              if (notification is ScrollUpdateNotification)
                 scrolledPositions.add(notification.metrics.pixels);
-              }
+              return false;
             },
             child: new ListWheelScrollView(
               controller: controller,
diff --git a/packages/flutter/test/widgets/navigator_test.dart b/packages/flutter/test/widgets/navigator_test.dart
index af639ad..627ab36 100644
--- a/packages/flutter/test/widgets/navigator_test.dart
+++ b/packages/flutter/test/widgets/navigator_test.dart
@@ -232,6 +232,7 @@
                       },
                     );
                   }
+                  return null;
                 },
               ),
             ),
diff --git a/packages/flutter/test/widgets/notification_test.dart b/packages/flutter/test/widgets/notification_test.dart
index 1cb8247..b3e7ef0 100644
--- a/packages/flutter/test/widgets/notification_test.dart
+++ b/packages/flutter/test/widgets/notification_test.dart
@@ -66,9 +66,10 @@
     await tester.pumpWidget(new NotificationListener<MyNotification>(
       onNotification: (MyNotification value) {
         log.add(value.runtimeType);
+        return false;
       },
       child: new NotificationListener<MyNotification>(
-        onNotification: (MyNotification value) { },
+        onNotification: (MyNotification value) => false,
         child: new Container(key: key),
       ),
     ));
diff --git a/packages/flutter/test/widgets/page_forward_transitions_test.dart b/packages/flutter/test/widgets/page_forward_transitions_test.dart
index d9d4ac5..2138073 100644
--- a/packages/flutter/test/widgets/page_forward_transitions_test.dart
+++ b/packages/flutter/test/widgets/page_forward_transitions_test.dart
@@ -108,6 +108,7 @@
             case '/3': return new TestRoute<Null>(settings: settings, child: const Text('F'));
             case '/4': return new TestRoute<Null>(settings: settings, child: const Text('G'));
           }
+          return null;
         }
       )
     );
@@ -192,6 +193,7 @@
             case '/': return new TestRoute<Null>(settings: settings, child: const Text('A'));
             case '/1': return new TestRoute<Null>(settings: settings, barrierColor: const Color(0xFFFFFF00), child: const Text('B'));
           }
+          return null;
         }
       )
     );
diff --git a/packages/flutter/test/widgets/text_formatter_test.dart b/packages/flutter/test/widgets/text_formatter_test.dart
index 6eccc2a..5c51a7b 100644
--- a/packages/flutter/test/widgets/text_formatter_test.dart
+++ b/packages/flutter/test/widgets/text_formatter_test.dart
@@ -21,6 +21,7 @@
       (TextEditingValue oldValue, TextEditingValue newValue) {
         calledOldValue = oldValue;
         calledNewValue = newValue;
+        return null;
       }
     );
 
diff --git a/packages/flutter_driver/test/flutter_driver_test.dart b/packages/flutter_driver/test/flutter_driver_test.dart
index be81f39..ab2b5ec 100644
--- a/packages/flutter_driver/test/flutter_driver_test.dart
+++ b/packages/flutter_driver/test/flutter_driver_test.dart
@@ -281,7 +281,7 @@
       });
 
       test('without clearing timeline', () async {
-        final Timeline timeline = await driver.traceAction(() {
+        final Timeline timeline = await driver.traceAction(() async {
           log.add('action');
         }, retainPriorEvents: true);
 
@@ -295,7 +295,7 @@
       });
 
       test('with clearing timeline', () async {
-        final Timeline timeline = await driver.traceAction(() {
+        final Timeline timeline = await driver.traceAction(() async {
           log.add('action');
         });
 
@@ -338,7 +338,7 @@
           };
         });
 
-        final Timeline timeline = await driver.traceAction(() {
+        final Timeline timeline = await driver.traceAction(() async {
           actionCalled = true;
         },
         streams: const <TimelineStream>[
diff --git a/packages/flutter_driver/test/src/extension_test.dart b/packages/flutter_driver/test/src/extension_test.dart
index 254333c..6fe4233 100644
--- a/packages/flutter_driver/test/src/extension_test.dart
+++ b/packages/flutter_driver/test/src/extension_test.dart
@@ -74,7 +74,7 @@
   group('getSemanticsId', () {
     FlutterDriverExtension extension;
     setUp(() {
-      extension = new FlutterDriverExtension((String arg) async {}, true);
+      extension = new FlutterDriverExtension((String arg) async => '', true);
     });
 
     testWidgets('works when semantics are enabled', (WidgetTester tester) async {
diff --git a/packages/flutter_test/lib/src/matchers.dart b/packages/flutter_test/lib/src/matchers.dart
index 02b5ba7..178f39e 100644
--- a/packages/flutter_test/lib/src/matchers.dart
+++ b/packages/flutter_test/lib/src/matchers.dart
@@ -1531,13 +1531,13 @@
         return 'Failed to generate screenshot from engine within the 10,000ms timeout.';
       if (autoUpdateGoldenFiles) {
         await goldenFileComparator.update(key, bytes.buffer.asUint8List());
-      } else {
-        try {
-          final bool success = await goldenFileComparator.compare(bytes.buffer.asUint8List(), key);
-          return success ? null : 'does not match';
-        } on TestFailure catch (ex) {
-          return ex.message;
-        }
+        return null;
+      }
+      try {
+        final bool success = await goldenFileComparator.compare(bytes.buffer.asUint8List(), key);
+        return success ? null : 'does not match';
+      } on TestFailure catch (ex) {
+        return ex.message;
       }
     }, additionalTime: const Duration(seconds: 11));
   }
diff --git a/packages/flutter_test/test/widget_tester_test.dart b/packages/flutter_test/test/widget_tester_test.dart
index eb4b613..da6c97c 100644
--- a/packages/flutter_test/test/widget_tester_test.dart
+++ b/packages/flutter_test/test/widget_tester_test.dart
@@ -500,7 +500,7 @@
       final Object key = new Object();
       await runZoned(() {
         expect(Zone.current[key], 'abczed');
-        return tester.runAsync<String>(() async {
+        return tester.runAsync<void>(() async {
           expect(Zone.current[key], 'abczed');
         });
       }, zoneValues: <dynamic, dynamic>{
diff --git a/packages/flutter_tools/test/compile_test.dart b/packages/flutter_tools/test/compile_test.dart
index dac6ddf..096c797 100644
--- a/packages/flutter_tools/test/compile_test.dart
+++ b/packages/flutter_tools/test/compile_test.dart
@@ -369,7 +369,7 @@
   String mockCompilerOutput) async {
   // Put content into the output stream after generator.recompile gets
   // going few lines below, resets completer.
-  new Future<List<int>>(() {
+  scheduleMicrotask(() {
     streamController.add(utf8.encode(mockCompilerOutput));
   });
   final CompilerOutput output = await generator.recompile(null /* mainPath */, <String>['/path/to/main.dart']);
diff --git a/packages/flutter_tools/test/runner/flutter_command_test.dart b/packages/flutter_tools/test/runner/flutter_command_test.dart
index 99562fc..f5c5b08 100644
--- a/packages/flutter_tools/test/runner/flutter_command_test.dart
+++ b/packages/flutter_tools/test/runner/flutter_command_test.dart
@@ -125,8 +125,12 @@
       // Crash if called a third time which is unexpected.
       mockTimes = <int>[1000, 2000];
 
-      final DummyFlutterCommand flutterCommand =
-          new DummyFlutterCommand(commandFunction: () async { throwToolExit('fail'); });
+      final DummyFlutterCommand flutterCommand = new DummyFlutterCommand(
+        commandFunction: () async {
+          throwToolExit('fail');
+          return null; // unreachable
+        },
+      );
 
       try {
         await flutterCommand.run();
diff --git a/packages/flutter_tools/test/utils_test.dart b/packages/flutter_tools/test/utils_test.dart
index f98adee..a638dec 100644
--- a/packages/flutter_tools/test/utils_test.dart
+++ b/packages/flutter_tools/test/utils_test.dart
@@ -130,7 +130,7 @@
 
     test('fires at start', () async {
       bool called = false;
-      poller = new Poller(() {
+      poller = new Poller(() async {
         called = true;
       }, const Duration(seconds: 1));
       expect(called, false);
@@ -141,7 +141,7 @@
     test('runs periodically', () async {
       // Ensure we get the first (no-delay) callback, and one of the periodic callbacks.
       int callCount = 0;
-      poller = new Poller(() {
+      poller = new Poller(() async {
         callCount++;
       }, new Duration(milliseconds: kShortDelay.inMilliseconds ~/ 2));
       expect(callCount, 0);