diff --git a/analysis_options.yaml b/analysis_options.yaml index b7974391a2..5b91937680 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -26,9 +26,8 @@ analyzer: 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 0946081052..3fd6427663 100644 --- a/dev/bots/test.dart +++ b/dev/bots/test.dart @@ -600,6 +600,7 @@ Future _verifyNoTestPackageImports(String workingDirectory) async { } 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 b66b4d2be2..54d98fbdad 100644 --- a/dev/devicelab/lib/tasks/microbenchmarks.dart +++ b/dev/devicelab/lib/tasks/microbenchmarks.dart @@ -141,7 +141,7 @@ Future> _readJsonResults(Process process) { jsonBuf.writeln(line.substring(line.indexOf(jsonPrefix) + jsonPrefix.length)); }); - process.exitCode.then((int code) async { + process.exitCode.then((int code) async { await Future.wait(>[ stdoutSub.cancel(), stderrSub.cancel(), diff --git a/dev/tools/gen_date_localizations.dart b/dev/tools/gen_date_localizations.dart index e70d923759..0d9333354e 100644 --- a/dev/tools/gen_date_localizations.dart +++ b/dev/tools/gen_date_localizations.dart @@ -58,6 +58,7 @@ Future main(List rawArgs) async { (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 86b6588019..4554480cda 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 @@ class CupertinoNavigationDemo extends StatelessWidget { ], ), tabBuilder: (BuildContext context, int index) { + assert(index >= 0 && index <= 2); switch (index) { case 0: return new CupertinoTabView( @@ -95,8 +96,8 @@ class CupertinoNavigationDemo extends StatelessWidget { 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 e39476050e..e6d0dd944c 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 @@ class ScrollableTabsDemoState extends State with SingleTicke controller: _controller, isScrollable: true, indicator: getIndicator(), - tabs: _allPages.map((_Page page) { + tabs: _allPages.map((_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 @@ class ScrollableTabsDemoState extends State with SingleTicke 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 a656406ace..8e534ef3a9 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 @@ Future runDemos(List demos, FlutterDriver driver) async { await driver.tap(demoItem); // Launch the demo if (kUnsynchronizedDemos.contains(demo)) { - await driver.runUnsynchronized>(() async { + await driver.runUnsynchronized(() 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 693898f1a5..3903e9d924 100644 --- a/examples/layers/test/sector_test.dart +++ b/examples/layers/test/sector_test.dart @@ -12,7 +12,7 @@ void main() { 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 5b859b1770..c0ed8f169b 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_examples_layers/main.dart' as demo; 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 27b98a8e97..789c528668 100644 --- a/examples/layers/test/smoketests/services/isolate_test.dart +++ b/examples/layers/test/smoketests/services/isolate_test.dart @@ -7,7 +7,7 @@ import 'package:flutter_test/flutter_test.dart'; 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 c8290b09e5..5d1b7c3952 100644 --- a/examples/layers/test/smoketests/services/lifecycle_test.dart +++ b/examples/layers/test/smoketests/services/lifecycle_test.dart @@ -7,7 +7,7 @@ import 'package:flutter_test/flutter_test.dart'; 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 0e724372ae..1530babf95 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 'package:flutter_test/flutter_test.dart'; 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 ed6dc33371..92327cca11 100644 --- a/examples/layers/test/smoketests/widgets/gestures_test.dart +++ b/examples/layers/test/smoketests/widgets/gestures_test.dart @@ -7,7 +7,7 @@ import 'package:flutter_test/flutter_test.dart'; 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 031c01dcba..581d79bdbc 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 'package:flutter_test/flutter_test.dart'; 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 fa70edfcb0..d62c1a097a 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 'package:flutter_test/flutter_test.dart'; 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 a5f596a84a..15eab9a368 100644 --- a/examples/layers/test/smoketests/widgets/sectors_test.dart +++ b/examples/layers/test/smoketests/widgets/sectors_test.dart @@ -7,7 +7,7 @@ import 'package:flutter_test/flutter_test.dart'; 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 01588efdd1..80beb763be 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 'package:flutter_test/flutter_test.dart'; 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 ed29943553..874880f668 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 'package:flutter_test/flutter_test.dart'; 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 bb33458bd2..e7c5d8b0f6 100644 --- a/packages/flutter/lib/analysis_options_user.yaml +++ b/packages/flutter/lib/analysis_options_user.yaml @@ -26,9 +26,6 @@ analyzer: 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 3dcffd974d..dee5be5f7c 100644 --- a/packages/flutter/lib/src/services/platform_channel.dart +++ b/packages/flutter/lib/src/services/platform_channel.dart @@ -313,6 +313,11 @@ class MethodChannel { /// /// 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 handler(MethodCall call)) { BinaryMessages.setMockMessageHandler( name, @@ -413,6 +418,7 @@ class EventChannel { 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 97f00b436d..f9714589b8 100644 --- a/packages/flutter/lib/src/services/platform_views.dart +++ b/packages/flutter/lib/src/services/platform_views.dart @@ -494,14 +494,14 @@ class AndroidViewController { } 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 3553bc29af..455241b693 100644 --- a/packages/flutter/lib/src/widgets/async.dart +++ b/packages/flutter/lib/src/widgets/async.dart @@ -359,9 +359,11 @@ typedef Widget AsyncWidgetBuilder(BuildContext context, AsyncSnapshot snap /// 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 extends StreamBuilderBase> { /// 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 @@ class StreamBuilder extends StreamBuilderBase> { /// 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 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 d936656e90..5e674db97f 100644 --- a/packages/flutter/lib/src/widgets/heroes.dart +++ b/packages/flutter/lib/src/widgets/heroes.dart @@ -321,12 +321,16 @@ class _HeroFlight { assert(!_aborted); assert(() { final Animation 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 c162d0d437..0e8b6754c6 100644 --- a/packages/flutter/test/cupertino/tab_test.dart +++ b/packages/flutter/test/cupertino/tab_test.dart @@ -71,6 +71,7 @@ void main() { } ); } + return null; }, ), ), @@ -86,6 +87,7 @@ void main() { 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 452283d2c4..2f0ab53c21 100644 --- a/packages/flutter/test/gestures/debug_test.dart +++ b/packages/flutter/test/gestures/debug_test.dart @@ -7,7 +7,7 @@ import 'package:flutter/gestures.dart'; 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 @@ void main() { debugPrint = oldCallback; }); - testWidgets('debugPrintRecognizerCallbacksTrace', (WidgetTester tester) { + testWidgets('debugPrintRecognizerCallbacksTrace', (WidgetTester tester) async { PointerEvent event; debugPrintRecognizerCallbacksTrace = true; final DebugPrintCallback oldCallback = debugPrint; @@ -95,7 +95,7 @@ void main() { 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 b611d2df22..5307e2598b 100644 --- a/packages/flutter/test/material/app_test.dart +++ b/packages/flutter/test/material/app_test.dart @@ -368,9 +368,11 @@ void main() { 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 27ccfd5ed5..4fea49fb56 100644 --- a/packages/flutter/test/material/checkbox_test.dart +++ b/packages/flutter/test/material/checkbox_test.dart @@ -250,7 +250,7 @@ void main() { 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 f9926cd28e..d94cfc0b0c 100644 --- a/packages/flutter/test/material/feedback_test.dart +++ b/packages/flutter/test/material/feedback_test.dart @@ -29,7 +29,7 @@ void main () { setUp(() { semanticEvents = >[]; - SystemChannels.accessibility.setMockMessageHandler((dynamic message) { + SystemChannels.accessibility.setMockMessageHandler((dynamic message) async { final Map typedMessage = message; semanticEvents.add(typedMessage.cast()); }); diff --git a/packages/flutter/test/material/feedback_tester.dart b/packages/flutter/test/material/feedback_tester.dart index 6db1743213..6397f03391 100644 --- a/packages/flutter/test/material/feedback_tester.dart +++ b/packages/flutter/test/material/feedback_tester.dart @@ -10,7 +10,7 @@ import 'package:flutter/services.dart'; /// 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 83474373cc..81619fec7b 100644 --- a/packages/flutter/test/material/radio_test.dart +++ b/packages/flutter/test/material/radio_test.dart @@ -216,7 +216,7 @@ void main() { 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 fe59537d4f..002c800133 100644 --- a/packages/flutter/test/material/refresh_indicator_test.dart +++ b/packages/flutter/test/material/refresh_indicator_test.dart @@ -358,7 +358,7 @@ void main() { 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 a498960b65..c2421ff781 100644 --- a/packages/flutter/test/material/switch_test.dart +++ b/packages/flutter/test/material/switch_test.dart @@ -274,7 +274,7 @@ void main() { 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 @@ void main() { 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 bfaf395e8e..097eaba7aa 100644 --- a/packages/flutter/test/material/tooltip_test.dart +++ b/packages/flutter/test/material/tooltip_test.dart @@ -679,7 +679,7 @@ void main() { testWidgets('has semantic events', (WidgetTester tester) async { final List semanticEvents = []; - 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 278bcb7390..969de60923 100644 --- a/packages/flutter/test/services/platform_messages_test.dart +++ b/packages/flutter/test/services/platform_messages_test.dart @@ -13,6 +13,7 @@ void main() { 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 e894a43b2f..91e16cb4af 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 @@ void main() { 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 ccf876ea39..ae16a9e12b 100644 --- a/packages/flutter/test/widgets/editable_text_test.dart +++ b/packages/flutter/test/widgets/editable_text_test.dart @@ -788,7 +788,7 @@ void main() { // Verify TextInput.setEditingState is fired with updated text when controller is replaced. final List log = []; - 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 2eb88f4531..013ebb1923 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 @@ void main() { textDirection: TextDirection.ltr, child: new NotificationListener( 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 @@ void main() { textDirection: TextDirection.ltr, child: new NotificationListener( 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 af639adc1e..627ab36720 100644 --- a/packages/flutter/test/widgets/navigator_test.dart +++ b/packages/flutter/test/widgets/navigator_test.dart @@ -232,6 +232,7 @@ void main() { }, ); } + return null; }, ), ), diff --git a/packages/flutter/test/widgets/notification_test.dart b/packages/flutter/test/widgets/notification_test.dart index 1cb824796c..b3e7ef01ac 100644 --- a/packages/flutter/test/widgets/notification_test.dart +++ b/packages/flutter/test/widgets/notification_test.dart @@ -66,9 +66,10 @@ void main() { await tester.pumpWidget(new NotificationListener( onNotification: (MyNotification value) { log.add(value.runtimeType); + return false; }, child: new NotificationListener( - 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 d9d4ac51a7..2138073748 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 @@ void main() { case '/3': return new TestRoute(settings: settings, child: const Text('F')); case '/4': return new TestRoute(settings: settings, child: const Text('G')); } + return null; } ) ); @@ -192,6 +193,7 @@ void main() { case '/': return new TestRoute(settings: settings, child: const Text('A')); case '/1': return new TestRoute(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 6eccc2a802..5c51a7bdaf 100644 --- a/packages/flutter/test/widgets/text_formatter_test.dart +++ b/packages/flutter/test/widgets/text_formatter_test.dart @@ -21,6 +21,7 @@ void main() { (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 be81f39b4c..ab2b5ecbe4 100644 --- a/packages/flutter_driver/test/flutter_driver_test.dart +++ b/packages/flutter_driver/test/flutter_driver_test.dart @@ -281,7 +281,7 @@ void main() { }); 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 @@ void main() { }); 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 @@ void main() { }; }); - final Timeline timeline = await driver.traceAction(() { + final Timeline timeline = await driver.traceAction(() async { actionCalled = true; }, streams: const [ diff --git a/packages/flutter_driver/test/src/extension_test.dart b/packages/flutter_driver/test/src/extension_test.dart index 254333c321..6fe42339cd 100644 --- a/packages/flutter_driver/test/src/extension_test.dart +++ b/packages/flutter_driver/test/src/extension_test.dart @@ -74,7 +74,7 @@ void main() { 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 02b5ba795b..178f39e075 100644 --- a/packages/flutter_test/lib/src/matchers.dart +++ b/packages/flutter_test/lib/src/matchers.dart @@ -1531,13 +1531,13 @@ class _MatchesGoldenFile extends AsyncMatcher { 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 eb4b6130d1..da6c97c958 100644 --- a/packages/flutter_test/test/widget_tester_test.dart +++ b/packages/flutter_test/test/widget_tester_test.dart @@ -500,7 +500,7 @@ void main() { final Object key = new Object(); await runZoned(() { expect(Zone.current[key], 'abczed'); - return tester.runAsync(() async { + return tester.runAsync(() async { expect(Zone.current[key], 'abczed'); }); }, zoneValues: { diff --git a/packages/flutter_tools/test/compile_test.dart b/packages/flutter_tools/test/compile_test.dart index dac6ddf6c1..096c797a3e 100644 --- a/packages/flutter_tools/test/compile_test.dart +++ b/packages/flutter_tools/test/compile_test.dart @@ -369,7 +369,7 @@ Future _recompile(StreamController> streamController, String mockCompilerOutput) async { // Put content into the output stream after generator.recompile gets // going few lines below, resets completer. - new Future>(() { + scheduleMicrotask(() { streamController.add(utf8.encode(mockCompilerOutput)); }); final CompilerOutput output = await generator.recompile(null /* mainPath */, ['/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 99562fc5ac..f5c5b08567 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 @@ void main() { // Crash if called a third time which is unexpected. mockTimes = [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 f98adee181..a638dec96e 100644 --- a/packages/flutter_tools/test/utils_test.dart +++ b/packages/flutter_tools/test/utils_test.dart @@ -130,7 +130,7 @@ baz=qux 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 @@ baz=qux 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);