diff --git a/examples/catalog/lib/custom_a11y_traversal.dart b/examples/catalog/lib/custom_a11y_traversal.dart
index ef65102..6195d23 100644
--- a/examples/catalog/lib/custom_a11y_traversal.dart
+++ b/examples/catalog/lib/custom_a11y_traversal.dart
@@ -61,14 +61,15 @@
 /// A Button class that wraps an [IconButton] with a [RowColumnTraversal] to
 /// set its traversal order.
 class SpinnerButton extends StatelessWidget {
-  const SpinnerButton(
-      {Key key,
-      this.onPressed,
-      this.icon,
-      this.rowOrder,
-      this.columnOrder,
-      this.field,
-      this.increment}) : super(key: key);
+  const SpinnerButton({
+    Key key,
+    this.onPressed,
+    this.icon,
+    this.rowOrder,
+    this.columnOrder,
+    this.field,
+    this.increment,
+  }) : super(key: key);
 
   final VoidCallback onPressed;
   final IconData icon;
diff --git a/examples/catalog/test/custom_semantics_test.dart b/examples/catalog/test/custom_semantics_test.dart
index 73de657..2ff0a38 100644
--- a/examples/catalog/test/custom_semantics_test.dart
+++ b/examples/catalog/test/custom_semantics_test.dart
@@ -91,7 +91,8 @@
   });
 }
 
-void expectAdjustable(SemanticsNode node, {
+void expectAdjustable(
+  SemanticsNode node, {
   bool hasIncreaseAction = true,
   bool hasDecreaseAction = true,
   String label = '',
diff --git a/examples/flutter_gallery/lib/demo/material/date_and_time_picker_demo.dart b/examples/flutter_gallery/lib/demo/material/date_and_time_picker_demo.dart
index e2b4651..9dda962 100644
--- a/examples/flutter_gallery/lib/demo/material/date_and_time_picker_demo.dart
+++ b/examples/flutter_gallery/lib/demo/material/date_and_time_picker_demo.dart
@@ -16,7 +16,8 @@
     this.labelText,
     this.valueText,
     this.valueStyle,
-    this.onPressed }) : super(key: key);
+    this.onPressed,
+  }) : super(key: key);
 
   final String labelText;
   final String valueText;
diff --git a/examples/flutter_gallery/lib/demo/shrine/expanding_bottom_sheet.dart b/examples/flutter_gallery/lib/demo/shrine/expanding_bottom_sheet.dart
index 3290a22..614c676 100644
--- a/examples/flutter_gallery/lib/demo/shrine/expanding_bottom_sheet.dart
+++ b/examples/flutter_gallery/lib/demo/shrine/expanding_bottom_sheet.dart
@@ -71,7 +71,8 @@
   @required T peak,
   @required T end,
   @required bool isForward,
-  @required Animation<double> parent}) {
+  @required Animation<double> parent,
+}) {
   Curve firstCurve;
   Curve secondCurve;
   double firstWeight;
diff --git a/examples/flutter_gallery/lib/demo/video_demo.dart b/examples/flutter_gallery/lib/demo/video_demo.dart
index 2c71c07..66d7841 100644
--- a/examples/flutter_gallery/lib/demo/video_demo.dart
+++ b/examples/flutter_gallery/lib/demo/video_demo.dart
@@ -50,8 +50,11 @@
 
   @override
   Widget build(BuildContext context) {
-    Widget fullScreenRoutePageBuilder(BuildContext context,
-        Animation<double> animation, Animation<double> secondaryAnimation) {
+    Widget fullScreenRoutePageBuilder(
+      BuildContext context,
+      Animation<double> animation,
+      Animation<double> secondaryAnimation,
+    ) {
       return _buildFullScreenVideo();
     }
 
diff --git a/examples/flutter_gallery/lib/gallery/backdrop.dart b/examples/flutter_gallery/lib/gallery/backdrop.dart
index fdfacbd..974e6af 100644
--- a/examples/flutter_gallery/lib/gallery/backdrop.dart
+++ b/examples/flutter_gallery/lib/gallery/backdrop.dart
@@ -24,7 +24,8 @@
 );
 
 class _TappableWhileStatusIs extends StatefulWidget {
-  const _TappableWhileStatusIs(this.status, {
+  const _TappableWhileStatusIs(
+    this.status, {
     Key key,
     this.controller,
     this.child,
diff --git a/examples/layers/rendering/src/sector_layout.dart b/examples/layers/rendering/src/sector_layout.dart
index 0db5f12..3767295 100644
--- a/examples/layers/rendering/src/sector_layout.dart
+++ b/examples/layers/rendering/src/sector_layout.dart
@@ -57,9 +57,10 @@
   const SectorDimensions({ this.deltaRadius = 0.0, this.deltaTheta = 0.0 });
 
   factory SectorDimensions.withConstraints(
-    SectorConstraints constraints,
-    { double deltaRadius = 0.0, double deltaTheta = 0.0, }
-  ) {
+    SectorConstraints constraints, {
+    double deltaRadius = 0.0,
+    double deltaTheta = 0.0,
+  }) {
     return SectorDimensions(
       deltaRadius: constraints.constrainDeltaRadius(deltaRadius),
       deltaTheta: constraints.constrainDeltaTheta(deltaTheta),
@@ -554,7 +555,8 @@
 }
 
 class RenderSolidColor extends RenderDecoratedSector {
-  RenderSolidColor(this.backgroundColor, {
+  RenderSolidColor(
+    this.backgroundColor, {
     this.desiredDeltaRadius = double.infinity,
     this.desiredDeltaTheta = kTwoPi,
   }) : super(BoxDecoration(color: backgroundColor));
diff --git a/packages/flutter/lib/src/foundation/binding.dart b/packages/flutter/lib/src/foundation/binding.dart
index c72a5aa..5728474 100644
--- a/packages/flutter/lib/src/foundation/binding.dart
+++ b/packages/flutter/lib/src/foundation/binding.dart
@@ -140,7 +140,7 @@
       registerServiceExtension(
         name: 'saveCompilationTrace',
         callback: (Map<String, String> parameters) async {
-          return <String, dynamic> {
+          return <String, dynamic>{
             'value': ui.saveCompilationTrace(),
           };
         },
diff --git a/packages/flutter/lib/src/foundation/diagnostics.dart b/packages/flutter/lib/src/foundation/diagnostics.dart
index 3ee6b4e..c4752bf 100644
--- a/packages/flutter/lib/src/foundation/diagnostics.dart
+++ b/packages/flutter/lib/src/foundation/diagnostics.dart
@@ -1045,7 +1045,9 @@
   /// message is stored as the description.
   ///
   /// The [name], `message`, and [level] arguments must not be null.
-  MessageProperty(String name, String message, {
+  MessageProperty(
+    String name,
+    String message, {
     DiagnosticLevel level = DiagnosticLevel.info,
   }) : assert(name != null),
        assert(message != null),
@@ -1063,7 +1065,9 @@
   /// Create a diagnostics property for strings.
   ///
   /// The [showName], [quoted], and [level] arguments must not be null.
-  StringProperty(String name, String value, {
+  StringProperty(
+    String name,
+    String value, {
     String description,
     String tooltip,
     bool showName = true,
@@ -1119,7 +1123,8 @@
 }
 
 abstract class _NumProperty<T extends num> extends DiagnosticsProperty<T> {
-  _NumProperty(String name,
+  _NumProperty(
+    String name,
     T value, {
     String ifNull,
     this.unit,
@@ -1137,7 +1142,8 @@
     level: level,
   );
 
-  _NumProperty.lazy(String name,
+  _NumProperty.lazy(
+    String name,
     ComputePropertyValueCallback<T> computeValue, {
     String ifNull,
     this.unit,
@@ -1190,7 +1196,9 @@
   /// If specified, [unit] describes the unit for the [value] (e.g. px).
   ///
   /// The [showName] and [level] arguments must not be null.
-  DoubleProperty(String name, double value, {
+  DoubleProperty(
+    String name,
+    double value, {
     String ifNull,
     String unit,
     String tooltip,
@@ -1249,7 +1257,9 @@
   /// Create a diagnostics property for integers.
   ///
   /// The [showName] and [level] arguments must not be null.
-  IntProperty(String name, int value, {
+  IntProperty(
+    String name,
+    int value, {
     String ifNull,
     bool showName = true,
     String unit,
@@ -1282,7 +1292,9 @@
   /// be sufficient to disambiguate its meaning.
   ///
   /// The [showName] and [level] arguments must not be null.
-  PercentProperty(String name, double fraction, {
+  PercentProperty(
+    String name,
+    double fraction, {
     String ifNull,
     bool showName = true,
     String tooltip,
@@ -1361,7 +1373,8 @@
   /// be descriptions that make the property name redundant.
   ///
   /// The [showName] and [level] arguments must not be null.
-  FlagProperty(String name, {
+  FlagProperty(
+    String name, {
     @required bool value,
     this.ifTrue,
     this.ifFalse,
@@ -1456,7 +1469,9 @@
   /// interesting to display.
   ///
   /// The [style], [showName], and [level] arguments must not be null.
-  IterableProperty(String name, Iterable<T> value, {
+  IterableProperty(
+    String name,
+    Iterable<T> value, {
     Object defaultValue = kNoDefaultValue,
     String ifNull,
     String ifEmpty = '[]',
@@ -1531,7 +1546,9 @@
   /// Create a diagnostics property that displays an enum.
   ///
   /// The [level] argument must also not be null.
-  EnumProperty(String name, T value, {
+  EnumProperty(
+    String name,
+    T value, {
     Object defaultValue = kNoDefaultValue,
     DiagnosticLevel level  = DiagnosticLevel.info,
   }) : assert(level != null),
@@ -1575,7 +1592,9 @@
   ///
   /// The [showName] and [level] arguments must not be null. Additionally, at
   /// least one of [ifPresent] and [ifNull] must not be null.
-  ObjectFlagProperty(String name, T value, {
+  ObjectFlagProperty(
+    String name,
+    T value, {
     this.ifPresent,
     String ifNull,
     bool showName = false,
diff --git a/packages/flutter/lib/src/gestures/pointer_signal_resolver.dart b/packages/flutter/lib/src/gestures/pointer_signal_resolver.dart
index c70a01d..75fa51e 100644
--- a/packages/flutter/lib/src/gestures/pointer_signal_resolver.dart
+++ b/packages/flutter/lib/src/gestures/pointer_signal_resolver.dart
@@ -59,7 +59,7 @@
         informationCollector: (StringBuffer information) {
           information.writeln('Event:');
           information.write('  $event');
-        }
+        },
       ));
     }
     _firstRegisteredCallback = null;
diff --git a/packages/flutter/lib/src/material/data_table.dart b/packages/flutter/lib/src/material/data_table.dart
index 0fa9eba..64a2f2f 100644
--- a/packages/flutter/lib/src/material/data_table.dart
+++ b/packages/flutter/lib/src/material/data_table.dart
@@ -162,7 +162,8 @@
   /// If the cell has no data, then a [Text] widget with placeholder
   /// text should be provided instead, and then the [placeholder]
   /// argument should be set to true.
-  const DataCell(this.child, {
+  const DataCell(
+    this.child, {
     this.placeholder = false,
     this.showEditIcon = false,
     this.onTap,
diff --git a/packages/flutter/lib/src/material/ink_well.dart b/packages/flutter/lib/src/material/ink_well.dart
index 036108e..8bd5ed2 100644
--- a/packages/flutter/lib/src/material/ink_well.dart
+++ b/packages/flutter/lib/src/material/ink_well.dart
@@ -47,15 +47,13 @@
   ///
   /// Typically causes the ink to propagate faster across the material. By default this
   /// method does nothing.
-  void confirm() {
-  }
+  void confirm() { }
 
   /// Called when the user input that triggered this feature's appearance was canceled.
   ///
   /// Typically causes the ink to gradually disappear. By default this method does
   /// nothing.
-  void cancel() {
-  }
+  void cancel() { }
 
   /// The ink's color.
   Color get color => _color;
diff --git a/packages/flutter/lib/src/material/material.dart b/packages/flutter/lib/src/material/material.dart
index a5c7f27..cb958216 100644
--- a/packages/flutter/lib/src/material/material.dart
+++ b/packages/flutter/lib/src/material/material.dart
@@ -53,7 +53,7 @@
 ///
 ///  * [MaterialType]
 ///  * [Material]
-final Map<MaterialType, BorderRadius> kMaterialEdges = <MaterialType, BorderRadius> {
+final Map<MaterialType, BorderRadius> kMaterialEdges = <MaterialType, BorderRadius>{
   MaterialType.canvas: null,
   MaterialType.card: BorderRadius.circular(2.0),
   MaterialType.circle: null,
diff --git a/packages/flutter/lib/src/painting/image_provider.dart b/packages/flutter/lib/src/painting/image_provider.dart
index 4d7ec57..39233aa 100644
--- a/packages/flutter/lib/src/painting/image_provider.dart
+++ b/packages/flutter/lib/src/painting/image_provider.dart
@@ -466,7 +466,7 @@
   /// Creates an object that fetches the image at the given URL.
   ///
   /// The arguments must not be null.
-  const NetworkImage(this.url, { this.scale = 1.0 , this.headers })
+  const NetworkImage(this.url, { this.scale = 1.0, this.headers })
     : assert(url != null),
       assert(scale != null);
 
@@ -736,7 +736,8 @@
   /// The [package] argument must be non-null when fetching an asset that is
   /// included in a package. See the documentation for the [ExactAssetImage] class
   /// itself for details.
-  const ExactAssetImage(this.assetName, {
+  const ExactAssetImage(
+    this.assetName, {
     this.scale = 1.0,
     this.bundle,
     this.package,
diff --git a/packages/flutter/lib/src/painting/image_resolution.dart b/packages/flutter/lib/src/painting/image_resolution.dart
index 849d151..1c5b7ec 100644
--- a/packages/flutter/lib/src/painting/image_resolution.dart
+++ b/packages/flutter/lib/src/painting/image_resolution.dart
@@ -128,7 +128,8 @@
   /// from the set of images to choose from. The [package] argument must be
   /// non-null when fetching an asset that is included in package. See the
   /// documentation for the [AssetImage] class itself for details.
-  const AssetImage(this.assetName, {
+  const AssetImage(
+    this.assetName, {
     this.bundle,
     this.package,
   }) : assert(assetName != null);
diff --git a/packages/flutter/lib/src/painting/matrix_utils.dart b/packages/flutter/lib/src/painting/matrix_utils.dart
index 31164ac..284190b 100644
--- a/packages/flutter/lib/src/painting/matrix_utils.dart
+++ b/packages/flutter/lib/src/painting/matrix_utils.dart
@@ -265,7 +265,9 @@
   /// Create a diagnostics property for [Matrix4] objects.
   ///
   /// The [showName] and [level] arguments must not be null.
-  TransformProperty(String name, Matrix4 value, {
+  TransformProperty(
+    String name,
+    Matrix4 value, {
     bool showName = true,
     Object defaultValue = kNoDefaultValue,
     DiagnosticLevel level = DiagnosticLevel.info,
diff --git a/packages/flutter/lib/src/painting/strut_style.dart b/packages/flutter/lib/src/painting/strut_style.dart
index 6625dae..5b9a1e9 100644
--- a/packages/flutter/lib/src/painting/strut_style.dart
+++ b/packages/flutter/lib/src/painting/strut_style.dart
@@ -302,7 +302,8 @@
   /// is inherited by being prepended onto the font family names. If
   /// [fontFamilyFallback] is meant to be empty, pass an empty list instead of null.
   /// This prevents the previous package name from being prepended twice.
-  StrutStyle.fromTextStyle(TextStyle textStyle, {
+  StrutStyle.fromTextStyle(
+    TextStyle textStyle, {
     String fontFamily,
     List<String> fontFamilyFallback,
     double fontSize,
diff --git a/packages/flutter/lib/src/physics/clamped_simulation.dart b/packages/flutter/lib/src/physics/clamped_simulation.dart
index 69f5147..a6fae44 100644
--- a/packages/flutter/lib/src/physics/clamped_simulation.dart
+++ b/packages/flutter/lib/src/physics/clamped_simulation.dart
@@ -21,7 +21,8 @@
   ///
   /// The named arguments specify the ranges for the clamping behavior, as
   /// applied to [x] and [dx].
-  ClampedSimulation(this.simulation, {
+  ClampedSimulation(
+    this.simulation, {
     this.xMin = double.negativeInfinity,
     this.xMax = double.infinity,
     this.dxMin = double.negativeInfinity,
diff --git a/packages/flutter/lib/src/physics/friction_simulation.dart b/packages/flutter/lib/src/physics/friction_simulation.dart
index 10125a4..43c626e 100644
--- a/packages/flutter/lib/src/physics/friction_simulation.dart
+++ b/packages/flutter/lib/src/physics/friction_simulation.dart
@@ -18,7 +18,10 @@
   /// drag coefficient, a unitless value; the initial position, in the same
   /// length units as used for [x]; and the initial velocity, in the same
   /// velocity units as used for [dx].
-  FrictionSimulation(double drag, double position, double velocity, {
+  FrictionSimulation(
+    double drag,
+    double position,
+    double velocity, {
     Tolerance tolerance = Tolerance.defaultTolerance,
   }) : _drag = drag,
        _dragLog = math.log(drag),
diff --git a/packages/flutter/lib/src/rendering/editable.dart b/packages/flutter/lib/src/rendering/editable.dart
index 0c50fbf..eb0190b 100644
--- a/packages/flutter/lib/src/rendering/editable.dart
+++ b/packages/flutter/lib/src/rendering/editable.dart
@@ -300,14 +300,14 @@
 
     final Offset startOffset = _textPainter.getOffsetForCaret(
       TextPosition(offset: _selection.start, affinity: _selection.affinity),
-      Rect.zero
+      Rect.zero,
     );
 
     _selectionStartInViewport.value = visibleRegion.contains(startOffset + effectiveOffset);
 
     final Offset endOffset =  _textPainter.getOffsetForCaret(
       TextPosition(offset: _selection.end, affinity: _selection.affinity),
-      Rect.zero
+      Rect.zero,
     );
 
     _selectionEndInViewport.value = visibleRegion.contains(endOffset + effectiveOffset);
diff --git a/packages/flutter/lib/src/rendering/paragraph.dart b/packages/flutter/lib/src/rendering/paragraph.dart
index 7f0fc51..a8d205c 100644
--- a/packages/flutter/lib/src/rendering/paragraph.dart
+++ b/packages/flutter/lib/src/rendering/paragraph.dart
@@ -41,7 +41,8 @@
   ///
   /// The [maxLines] property may be null (and indeed defaults to null), but if
   /// it is not null, it must be greater than zero.
-  RenderParagraph(TextSpan text, {
+  RenderParagraph(
+    TextSpan text, {
     TextAlign textAlign = TextAlign.start,
     @required TextDirection textDirection,
     bool softWrap = true,
diff --git a/packages/flutter/lib/src/rendering/platform_view.dart b/packages/flutter/lib/src/rendering/platform_view.dart
index a73f625..f596db5 100644
--- a/packages/flutter/lib/src/rendering/platform_view.dart
+++ b/packages/flutter/lib/src/rendering/platform_view.dart
@@ -503,7 +503,7 @@
   // Before the arena for a pointer is resolved all events are cached here, if we win the arena
   // the cached events are dispatched to the view, if we lose the arena we clear the cache for
   // the pointer.
-  final Map<int, List<PointerEvent>> cachedEvents = <int, List<PointerEvent>> {};
+  final Map<int, List<PointerEvent>> cachedEvents = <int, List<PointerEvent>>{};
 
   // Pointer for which we have already won the arena, events for pointers in this set are
   // immediately dispatched to the Android view.
diff --git a/packages/flutter/lib/src/rendering/shifted_box.dart b/packages/flutter/lib/src/rendering/shifted_box.dart
index f5dc34c..dac8fa5 100644
--- a/packages/flutter/lib/src/rendering/shifted_box.dart
+++ b/packages/flutter/lib/src/rendering/shifted_box.dart
@@ -244,7 +244,7 @@
   /// A constructor to be used only when the extending class also has a mixin.
   // TODO(gspencer): Remove this constructor once https://github.com/dart-lang/sdk/issues/31543 is fixed.
   @protected
-  RenderAligningShiftedBox.mixin(AlignmentGeometry alignment,TextDirection textDirection, RenderBox child)
+  RenderAligningShiftedBox.mixin(AlignmentGeometry alignment, TextDirection textDirection, RenderBox child)
     : this(alignment: alignment, textDirection: textDirection, child: child);
 
   Alignment _resolvedAlignment;
diff --git a/packages/flutter/lib/src/rendering/sliver.dart b/packages/flutter/lib/src/rendering/sliver.dart
index c09253d..3bb9d90 100644
--- a/packages/flutter/lib/src/rendering/sliver.dart
+++ b/packages/flutter/lib/src/rendering/sliver.dart
@@ -773,7 +773,8 @@
   /// Creates a sliver hit test entry.
   ///
   /// The [mainAxisPosition] and [crossAxisPosition] arguments must not be null.
-  const SliverHitTestEntry(RenderSliver target, {
+  const SliverHitTestEntry(
+    RenderSliver target, {
     @required this.mainAxisPosition,
     @required this.crossAxisPosition,
   }) : assert(mainAxisPosition != null),
diff --git a/packages/flutter/lib/src/services/platform_views.dart b/packages/flutter/lib/src/services/platform_views.dart
index 850cfb9..983ee54 100644
--- a/packages/flutter/lib/src/services/platform_views.dart
+++ b/packages/flutter/lib/src/services/platform_views.dart
@@ -117,7 +117,7 @@
     assert(creationParams == null || creationParamsCodec != null);
 
     // TODO(amirh): pass layoutDirection once the system channel supports it.
-    final Map<String, dynamic> args = <String, dynamic> {
+    final Map<String, dynamic> args = <String, dynamic>{
       'id': id,
       'viewType': viewType,
     };
@@ -520,7 +520,7 @@
     if (_state == _AndroidViewState.waitingForSize)
       return _create(size);
 
-    await SystemChannels.platform_views.invokeMethod<void>('resize', <String, dynamic> {
+    await SystemChannels.platform_views.invokeMethod<void>('resize', <String, dynamic>{
       'id': id,
       'width': size.width,
       'height': size.height,
@@ -542,7 +542,7 @@
     if (_state == _AndroidViewState.waitingForSize)
       return;
 
-    await SystemChannels.platform_views.invokeMethod<void>('setDirection', <String, dynamic> {
+    await SystemChannels.platform_views.invokeMethod<void>('setDirection', <String, dynamic>{
       'id': id,
       'direction': _getAndroidDirection(layoutDirection),
     });
@@ -578,7 +578,7 @@
   }
 
   Future<void> _create(Size size) async {
-    final Map<String, dynamic> args = <String, dynamic> {
+    final Map<String, dynamic> args = <String, dynamic>{
       'id': id,
       'viewType': _viewType,
       'width': size.width,
@@ -642,7 +642,7 @@
   /// Calling this method releases the delayed events to the embedded UIView and makes it consume
   /// any following touch events for the pointers involved in the active gesture.
   Future<void> acceptGesture() {
-    final Map<String, dynamic> args = <String, dynamic> {
+    final Map<String, dynamic> args = <String, dynamic>{
       'id': id,
     };
     return SystemChannels.platform_views.invokeMethod('acceptGesture', args);
@@ -654,7 +654,7 @@
   /// Calling this method drops the buffered touch events and prevents any future touch events for
   /// the pointers that are part of the active touch sequence from arriving to the embedded view.
   Future<void> rejectGesture() {
-    final Map<String, dynamic> args = <String, dynamic> {
+    final Map<String, dynamic> args = <String, dynamic>{
       'id': id,
     };
     return SystemChannels.platform_views.invokeMethod('rejectGesture', args);
diff --git a/packages/flutter/lib/src/widgets/icon.dart b/packages/flutter/lib/src/widgets/icon.dart
index 0b8cfbc..73a3416 100644
--- a/packages/flutter/lib/src/widgets/icon.dart
+++ b/packages/flutter/lib/src/widgets/icon.dart
@@ -48,7 +48,8 @@
   /// Creates an icon.
   ///
   /// The [size] and [color] default to the value given by the current [IconTheme].
-  const Icon(this.icon, {
+  const Icon(
+    this.icon, {
     Key key,
     this.size,
     this.color,
diff --git a/packages/flutter/lib/src/widgets/image.dart b/packages/flutter/lib/src/widgets/image.dart
index 785b82f..d941266 100644
--- a/packages/flutter/lib/src/widgets/image.dart
+++ b/packages/flutter/lib/src/widgets/image.dart
@@ -195,7 +195,8 @@
   /// [FilterQuality.none] which corresponds to nearest-neighbor.
   ///
   /// If [excludeFromSemantics] is true, then [semanticLabel] will be ignored.
-  Image.network(String src, {
+  Image.network(
+    String src, {
     Key key,
     double scale = 1.0,
     this.semanticLabel,
@@ -236,7 +237,8 @@
   /// [FilterQuality.none] which corresponds to nearest-neighbor.
   ///
   /// If [excludeFromSemantics] is true, then [semanticLabel] will be ignored.
-  Image.file(File file, {
+  Image.file(
+    File file, {
     Key key,
     double scale = 1.0,
     this.semanticLabel,
@@ -384,7 +386,8 @@
   ///    scale is present.
   ///  * <https://flutter.io/assets-and-images/>, an introduction to assets in
   ///    Flutter.
-  Image.asset(String name, {
+  Image.asset(
+    String name, {
     Key key,
     AssetBundle bundle,
     this.semanticLabel,
@@ -425,7 +428,8 @@
   /// [FilterQuality.none] which corresponds to nearest-neighbor.
   ///
   /// If [excludeFromSemantics] is true, then [semanticLabel] will be ignored.
-  Image.memory(Uint8List bytes, {
+  Image.memory(
+    Uint8List bytes, {
     Key key,
     double scale = 1.0,
     this.semanticLabel,
diff --git a/packages/flutter/lib/src/widgets/image_icon.dart b/packages/flutter/lib/src/widgets/image_icon.dart
index 65b1b04..b795b8e 100644
--- a/packages/flutter/lib/src/widgets/image_icon.dart
+++ b/packages/flutter/lib/src/widgets/image_icon.dart
@@ -23,7 +23,8 @@
   /// Creates an image icon.
   ///
   /// The [size] and [color] default to the value given by the current [IconTheme].
-  const ImageIcon(this.image, {
+  const ImageIcon(
+    this.image, {
     Key key,
     this.size,
     this.color,
diff --git a/packages/flutter/lib/src/widgets/nested_scroll_view.dart b/packages/flutter/lib/src/widgets/nested_scroll_view.dart
index ec7fdb5..daa6ba3 100644
--- a/packages/flutter/lib/src/widgets/nested_scroll_view.dart
+++ b/packages/flutter/lib/src/widgets/nested_scroll_view.dart
@@ -844,7 +844,8 @@
 }
 
 class _NestedScrollController extends ScrollController {
-  _NestedScrollController(this.coordinator, {
+  _NestedScrollController(
+    this.coordinator, {
     double initialScrollOffset = 0.0,
     String debugLabel,
   }) : super(initialScrollOffset: initialScrollOffset, debugLabel: debugLabel);
diff --git a/packages/flutter/lib/src/widgets/performance_overlay.dart b/packages/flutter/lib/src/widgets/performance_overlay.dart
index f8482d3..b70c6b6 100644
--- a/packages/flutter/lib/src/widgets/performance_overlay.dart
+++ b/packages/flutter/lib/src/widgets/performance_overlay.dart
@@ -36,11 +36,12 @@
   }) : super(key: key);
 
   /// Create a performance overlay that displays all available statistics
-  PerformanceOverlay.allEnabled({ Key key,
-                                  this.rasterizerThreshold = 0,
-                                  this.checkerboardRasterCacheImages = false,
-                                  this.checkerboardOffscreenLayers = false })
-    : optionsMask =
+  PerformanceOverlay.allEnabled({
+    Key key,
+    this.rasterizerThreshold = 0,
+    this.checkerboardRasterCacheImages = false,
+    this.checkerboardOffscreenLayers = false,
+  }) : optionsMask =
         1 << PerformanceOverlayOption.displayRasterizerStatistics.index |
         1 << PerformanceOverlayOption.visualizeRasterizerStatistics.index |
         1 << PerformanceOverlayOption.displayEngineStatistics.index |
diff --git a/packages/flutter/lib/src/widgets/text.dart b/packages/flutter/lib/src/widgets/text.dart
index 5991ca5..99b76f4 100644
--- a/packages/flutter/lib/src/widgets/text.dart
+++ b/packages/flutter/lib/src/widgets/text.dart
@@ -224,7 +224,8 @@
   /// closest enclosing [DefaultTextStyle].
   ///
   /// The [data] parameter must not be null.
-  const Text(this.data, {
+  const Text(
+    this.data, {
     Key key,
     this.style,
     this.strutStyle,
@@ -246,7 +247,8 @@
   /// Creates a text widget with a [TextSpan].
   ///
   /// The [textSpan] parameter must not be null.
-  const Text.rich(this.textSpan, {
+  const Text.rich(
+    this.textSpan, {
     Key key,
     this.style,
     this.strutStyle,
diff --git a/packages/flutter/lib/src/widgets/text_selection.dart b/packages/flutter/lib/src/widgets/text_selection.dart
index 5646fe4..2427b0c 100644
--- a/packages/flutter/lib/src/widgets/text_selection.dart
+++ b/packages/flutter/lib/src/widgets/text_selection.dart
@@ -640,7 +640,7 @@
             ],
           ),
         ),
-      )
+      ),
     );
   }
 
diff --git a/packages/flutter/test/cupertino/route_test.dart b/packages/flutter/test/cupertino/route_test.dart
index a24ed97..dd15284 100644
--- a/packages/flutter/test/cupertino/route_test.dart
+++ b/packages/flutter/test/cupertino/route_test.dart
@@ -348,7 +348,7 @@
                           onPressed: () {
                             Navigator.pop<void>(context);
                           },
-                        )
+                        ),
                       ],
                     );
                   },
diff --git a/packages/flutter/test/material/popup_menu_test.dart b/packages/flutter/test/material/popup_menu_test.dart
index a08af4d..ed4a16a 100644
--- a/packages/flutter/test/material/popup_menu_test.dart
+++ b/packages/flutter/test/material/popup_menu_test.dart
@@ -14,7 +14,7 @@
     final Key targetKey = UniqueKey();
     await tester.pumpWidget(
       MaterialApp(
-        routes: <String, WidgetBuilder> {
+        routes: <String, WidgetBuilder>{
           '/next': (BuildContext context) {
             return const Text('Next');
           },
diff --git a/packages/flutter/test/material/radio_test.dart b/packages/flutter/test/material/radio_test.dart
index 8e6c5d6..3be3d20 100644
--- a/packages/flutter/test/material/radio_test.dart
+++ b/packages/flutter/test/material/radio_test.dart
@@ -267,7 +267,7 @@
                 groupValue: 1,
                 onChanged: (int value) { },
               ),
-            )
+            ),
           ),
         ),
       ),
diff --git a/packages/flutter/test/material/tab_bar_theme_test.dart b/packages/flutter/test/material/tab_bar_theme_test.dart
index e8fb853..23fef94 100644
--- a/packages/flutter/test/material/tab_bar_theme_test.dart
+++ b/packages/flutter/test/material/tab_bar_theme_test.dart
@@ -26,7 +26,10 @@
 ];
 
 Widget _withTheme(
-  TabBarTheme theme, { List<Widget> tabs = _tabs, bool isScrollable = false }) {
+  TabBarTheme theme, {
+  List<Widget> tabs = _tabs,
+  bool isScrollable = false,
+}) {
   return MaterialApp(
     theme: ThemeData(tabBarTheme: theme),
     home: Scaffold(
@@ -102,7 +105,7 @@
     const double indicatorWeight = 2.0; // default value
 
     const EdgeInsetsGeometry labelPadding = EdgeInsets.fromLTRB(
-      leftPadding, topPadding, rightPadding, bottomPadding
+      leftPadding, topPadding, rightPadding, bottomPadding,
     );
 
     const TabBarTheme tabBarTheme = TabBarTheme(labelPadding: labelPadding);
diff --git a/packages/flutter/test/material/theme_test.dart b/packages/flutter/test/material/theme_test.dart
index 54fe5ca..df52aa3 100644
--- a/packages/flutter/test/material/theme_test.dart
+++ b/packages/flutter/test/material/theme_test.dart
@@ -741,7 +741,7 @@
     double wordSpacingFactor = 1.0,
     double wordSpacingDelta = 0.0,
     double heightFactor = 1.0,
-    double heightDelta = 0.0
+    double heightDelta = 0.0,
   }) {
     throw UnimplementedError();
   }
@@ -773,7 +773,7 @@
     Color decorationColor,
     TextDecorationStyle decorationStyle,
     double decorationThickness,
-    String debugLabel
+    String debugLabel,
   }) {
     throw UnimplementedError();
   }
@@ -796,7 +796,7 @@
     FontWeight fontWeight,
     FontStyle fontStyle,
     double height,
-    StrutStyle strutStyle
+    StrutStyle strutStyle,
   }) {
     throw UnimplementedError();
   }
diff --git a/packages/flutter/test/rendering/mock_canvas.dart b/packages/flutter/test/rendering/mock_canvas.dart
index 947d66f..2116313 100644
--- a/packages/flutter/test/rendering/mock_canvas.dart
+++ b/packages/flutter/test/rendering/mock_canvas.dart
@@ -866,9 +866,15 @@
 
 abstract class _DrawCommandPaintPredicate extends _PaintPredicate {
   _DrawCommandPaintPredicate(
-    this.symbol, this.name, this.argumentCount, this.paintArgumentIndex,
-    { this.color, this.strokeWidth, this.hasMaskFilter, this.style, }
-  );
+    this.symbol,
+    this.name,
+    this.argumentCount,
+    this.paintArgumentIndex, {
+    this.color,
+    this.strokeWidth,
+    this.hasMaskFilter,
+    this.style,
+  });
 
   final Symbol symbol;
   final String name;
@@ -934,7 +940,9 @@
 }
 
 class _OneParameterPaintPredicate<T> extends _DrawCommandPaintPredicate {
-  _OneParameterPaintPredicate(Symbol symbol, String name, {
+  _OneParameterPaintPredicate(
+    Symbol symbol,
+    String name, {
     @required this.expected,
     @required Color color,
     @required double strokeWidth,
@@ -967,7 +975,9 @@
 }
 
 class _TwoParameterPaintPredicate<T1, T2> extends _DrawCommandPaintPredicate {
-  _TwoParameterPaintPredicate(Symbol symbol, String name, {
+  _TwoParameterPaintPredicate(
+    Symbol symbol,
+    String name, {
     @required this.expected1,
     @required this.expected2,
     @required Color color,
diff --git a/packages/flutter/test/semantics/semantics_service_test.dart b/packages/flutter/test/semantics/semantics_service_test.dart
index a21358e..57ddf44 100644
--- a/packages/flutter/test/semantics/semantics_service_test.dart
+++ b/packages/flutter/test/semantics/semantics_service_test.dart
@@ -22,8 +22,8 @@
     await SemanticsService.announce('announcement 2', TextDirection.rtl);
 
     expect(log, equals(<Map<String, dynamic>>[
-      <String, dynamic> {'type': 'announce', 'data': <String, dynamic> {'message': 'announcement 1', 'textDirection': 1}},
-      <String, dynamic> {'type': 'announce', 'data': <String, dynamic> {'message': 'announcement 2', 'textDirection': 0}},
+      <String, dynamic>{'type': 'announce', 'data': <String, dynamic>{'message': 'announcement 1', 'textDirection': 1}},
+      <String, dynamic>{'type': 'announce', 'data': <String, dynamic>{'message': 'announcement 2', 'textDirection': 0}},
     ]));
   });
 }
diff --git a/packages/flutter/test/services/message_codecs_test.dart b/packages/flutter/test/services/message_codecs_test.dart
index 8df9863..8c5fad1 100644
--- a/packages/flutter/test/services/message_codecs_test.dart
+++ b/packages/flutter/test/services/message_codecs_test.dart
@@ -67,7 +67,7 @@
         '',
         'hello',
         <dynamic>['nested', <dynamic>[]],
-        <dynamic, dynamic>{ 'a': 'nested', 'b': <dynamic, dynamic>{} },
+        <dynamic, dynamic>{'a': 'nested', 'b': <dynamic, dynamic>{}},
         'world',
       ];
       _checkEncodeDecode<dynamic>(json, message);
@@ -185,7 +185,7 @@
           double.nan,
         ]),
         <dynamic>['nested', <dynamic>[]],
-        <dynamic, dynamic>{ 'a': 'nested', null: <dynamic, dynamic>{} },
+        <dynamic, dynamic>{'a': 'nested', null: <dynamic, dynamic>{}},
         'world',
       ];
       _checkEncodeDecode<dynamic>(standard, message);
diff --git a/packages/flutter/test/services/text_input_test.dart b/packages/flutter/test/services/text_input_test.dart
index 60984c9..ee9192c 100644
--- a/packages/flutter/test/services/text_input_test.dart
+++ b/packages/flutter/test/services/text_input_test.dart
@@ -26,7 +26,9 @@
       );
       final Map<String, dynamic> json = configuration.toJson();
       expect(json['inputType'], <String, dynamic>{
-        'name': 'TextInputType.text', 'signed': null, 'decimal': null,
+        'name': 'TextInputType.text',
+        'signed': null,
+        'decimal': null,
       });
       expect(json['obscureText'], true);
       expect(json['autocorrect'], false);
@@ -42,7 +44,9 @@
       );
       final Map<String, dynamic> json = configuration.toJson();
       expect(json['inputType'], <String, dynamic>{
-        'name': 'TextInputType.number', 'signed': false, 'decimal': true,
+        'name': 'TextInputType.number',
+        'signed': false,
+        'decimal': true,
       });
       expect(json['obscureText'], true);
       expect(json['autocorrect'], false);
diff --git a/packages/flutter/test/widgets/backdrop_filter_test.dart b/packages/flutter/test/widgets/backdrop_filter_test.dart
index 80294b3..df499b8 100644
--- a/packages/flutter/test/widgets/backdrop_filter_test.dart
+++ b/packages/flutter/test/widgets/backdrop_filter_test.dart
@@ -37,8 +37,8 @@
                 ),
               ),
             ],
-          )
-        )
+          ),
+        ),
       )
     );
     await expectLater(
diff --git a/packages/flutter/test/widgets/heroes_test.dart b/packages/flutter/test/widgets/heroes_test.dart
index 264a90e..7aee8c8 100644
--- a/packages/flutter/test/widgets/heroes_test.dart
+++ b/packages/flutter/test/widgets/heroes_test.dart
@@ -1649,8 +1649,7 @@
     expect(tester.takeException(), isAssertionError);
   });
 
-  testWidgets('Hero within a Hero subtree with Builder, throws', (
-      WidgetTester tester) async {
+  testWidgets('Hero within a Hero subtree with Builder, throws', (WidgetTester tester) async {
     await tester.pumpWidget(
       MaterialApp(
         home: Material(
@@ -1672,8 +1671,7 @@
     expect(tester.takeException(),isAssertionError);
   });
 
-  testWidgets('Hero within a Hero subtree with LayoutBuilder, throws', (
-      WidgetTester tester) async {
+  testWidgets('Hero within a Hero subtree with LayoutBuilder, throws', (WidgetTester tester) async {
     await tester.pumpWidget(
       MaterialApp(
         home: Material(
diff --git a/packages/flutter/test/widgets/image_test.dart b/packages/flutter/test/widgets/image_test.dart
index a45eea9..284da70 100644
--- a/packages/flutter/test/widgets/image_test.dart
+++ b/packages/flutter/test/widgets/image_test.dart
@@ -902,7 +902,7 @@
 }
 
 class TestImageStreamCompleter extends ImageStreamCompleter {
-  final Map<ImageListener, ImageErrorListener> listeners = <ImageListener, ImageErrorListener> {};
+  final Map<ImageListener, ImageErrorListener> listeners = <ImageListener, ImageErrorListener>{};
 
   @override
   void addListener(ImageListener listener, { ImageErrorListener onError }) {
diff --git a/packages/flutter/test/widgets/linked_scroll_view_test.dart b/packages/flutter/test/widgets/linked_scroll_view_test.dart
index 1f36a3a..b980107 100644
--- a/packages/flutter/test/widgets/linked_scroll_view_test.dart
+++ b/packages/flutter/test/widgets/linked_scroll_view_test.dart
@@ -105,7 +105,8 @@
 }
 
 class LinkedScrollPosition extends ScrollPositionWithSingleContext {
-  LinkedScrollPosition(this.owner, {
+  LinkedScrollPosition(
+    this.owner, {
     ScrollPhysics physics,
     ScrollContext context,
     double initialPixels,
diff --git a/packages/flutter/test/widgets/navigator_replacement_test.dart b/packages/flutter/test/widgets/navigator_replacement_test.dart
index ea76859..e1da397 100644
--- a/packages/flutter/test/widgets/navigator_replacement_test.dart
+++ b/packages/flutter/test/widgets/navigator_replacement_test.dart
@@ -9,7 +9,7 @@
   testWidgets('Back during pushReplacement', (WidgetTester tester) async {
     await tester.pumpWidget(MaterialApp(
       home: const Material(child: Text('home')),
-      routes: <String, WidgetBuilder> {
+      routes: <String, WidgetBuilder>{
         '/a': (BuildContext context) => const Material(child: Text('a')),
         '/b': (BuildContext context) => const Material(child: Text('b')),
       },
@@ -42,7 +42,7 @@
   testWidgets('pushAndRemoveUntil', (WidgetTester tester) async {
     await tester.pumpWidget(MaterialApp(
       home: const Material(child: Text('home')),
-      routes: <String, WidgetBuilder> {
+      routes: <String, WidgetBuilder>{
         '/a': (BuildContext context) => const Material(child: Text('a')),
         '/b': (BuildContext context) => const Material(child: Text('b')),
       },
diff --git a/packages/flutter/test/widgets/obscured_animated_image_test.dart b/packages/flutter/test/widgets/obscured_animated_image_test.dart
index cc339bb..eaacbf9 100644
--- a/packages/flutter/test/widgets/obscured_animated_image_test.dart
+++ b/packages/flutter/test/widgets/obscured_animated_image_test.dart
@@ -22,7 +22,7 @@
     await tester.pumpWidget(
       MaterialApp(
         home: Image(image: fakeImageProvider, excludeFromSemantics: true, key: imageKey),
-        routes: <String, WidgetBuilder> {
+        routes: <String, WidgetBuilder>{
           '/page': (BuildContext context) => Container(),
         },
       )
diff --git a/packages/flutter/test/widgets/semantics_event_test.dart b/packages/flutter/test/widgets/semantics_event_test.dart
index 035ab3d..c72e0ba 100644
--- a/packages/flutter/test/widgets/semantics_event_test.dart
+++ b/packages/flutter/test/widgets/semantics_event_test.dart
@@ -27,9 +27,9 @@
   test('SemanticsEvent.toMap', () {
     expect(
       TestSemanticsEvent(text: 'hi', number: 11).toMap(),
-      <String, dynamic> {
+      <String, dynamic>{
         'type': 'TestEvent',
-        'data': <String, dynamic> {
+        'data': <String, dynamic>{
           'text': 'hi',
           'number': 11,
         },
@@ -37,10 +37,10 @@
     );
     expect(
       TestSemanticsEvent(text: 'hi', number: 11).toMap(nodeId: 123),
-      <String, dynamic> {
+      <String, dynamic>{
         'type': 'TestEvent',
         'nodeId': 123,
-        'data': <String, dynamic> {
+        'data': <String, dynamic>{
           'text': 'hi',
           'number': 11,
         },
diff --git a/packages/flutter/test/widgets/semantics_tester.dart b/packages/flutter/test/widgets/semantics_tester.dart
index 7b22c79..8cb2014 100644
--- a/packages/flutter/test/widgets/semantics_tester.dart
+++ b/packages/flutter/test/widgets/semantics_tester.dart
@@ -621,17 +621,16 @@
 
 class _HasSemantics extends Matcher {
   const _HasSemantics(
-    this._semantics,
-    {
-      @required this.ignoreRect,
-      @required this.ignoreTransform,
-      @required this.ignoreId,
-      @required this.childOrder,
-    }) : assert(_semantics != null),
-         assert(ignoreRect != null),
-         assert(ignoreId != null),
-         assert(ignoreTransform != null),
-         assert(childOrder != null);
+    this._semantics, {
+    @required this.ignoreRect,
+    @required this.ignoreTransform,
+    @required this.ignoreId,
+    @required this.childOrder,
+  }) : assert(_semantics != null),
+       assert(ignoreRect != null),
+       assert(ignoreId != null),
+       assert(ignoreTransform != null),
+       assert(childOrder != null);
 
   final TestSemantics _semantics;
   final bool ignoreRect;
diff --git a/packages/flutter/test/widgets/sliver_appbar_opacity.dart b/packages/flutter/test/widgets/sliver_appbar_opacity.dart
index a22bf34..ddb1328 100644
--- a/packages/flutter/test/widgets/sliver_appbar_opacity.dart
+++ b/packages/flutter/test/widgets/sliver_appbar_opacity.dart
@@ -166,7 +166,7 @@
 
 class _TestWidget extends StatelessWidget {
 
-  const _TestWidget({this.pinned, this.floating, this.bottom, this.controller,});
+  const _TestWidget({this.pinned, this.floating, this.bottom, this.controller});
 
   final bool pinned;
   final bool floating;
diff --git a/packages/flutter/test/widgets/table_test.dart b/packages/flutter/test/widgets/table_test.dart
index b12d1cf..3df1c86 100644
--- a/packages/flutter/test/widgets/table_test.dart
+++ b/packages/flutter/test/widgets/table_test.dart
@@ -73,7 +73,7 @@
         textDirection: TextDirection.ltr,
         child: Center(
           child: Table(
-            columnWidths: const <int, TableColumnWidth> {
+            columnWidths: const <int, TableColumnWidth>{
               0: FixedColumnWidth(100.0),
               1: FixedColumnWidth(110.0),
               2: FixedColumnWidth(125.0),
@@ -143,7 +143,7 @@
         textDirection: TextDirection.rtl,
         child: Center(
           child: Table(
-            columnWidths: const <int, TableColumnWidth> {
+            columnWidths: const <int, TableColumnWidth>{
               0: FixedColumnWidth(100.0),
               1: FixedColumnWidth(110.0),
               2: FixedColumnWidth(125.0),
diff --git a/packages/flutter/test/widgets/widget_inspector_test.dart b/packages/flutter/test/widgets/widget_inspector_test.dart
index d93ec5e..910ee83 100644
--- a/packages/flutter/test/widgets/widget_inspector_test.dart
+++ b/packages/flutter/test/widgets/widget_inspector_test.dart
@@ -964,7 +964,7 @@
       expect(selectionChangedCount, equals(2));
       expect(service.selection.current, equals(elementB.renderObject));
 
-      await service.testExtension('setSelectionById', <String, String>{'arg' : service.toId(elementA, 'my-group'), 'objectGroup': 'my-group'});
+      await service.testExtension('setSelectionById', <String, String>{'arg': service.toId(elementA, 'my-group'), 'objectGroup': 'my-group'});
       expect(selectionChangedCount, equals(3));
       expect(service.selection.currentElement, equals(elementA));
       expect(service.selection.current, equals(elementA.renderObject));
diff --git a/packages/flutter_driver/lib/src/driver/timeline_summary.dart b/packages/flutter_driver/lib/src/driver/timeline_summary.dart
index 95060fb..cf2dfbd 100644
--- a/packages/flutter_driver/lib/src/driver/timeline_summary.dart
+++ b/packages/flutter_driver/lib/src/driver/timeline_summary.dart
@@ -85,7 +85,7 @@
 
   /// Encodes this summary as JSON.
   Map<String, dynamic> get summaryJson {
-    return <String, dynamic> {
+    return <String, dynamic>{
       'average_frame_build_time_millis': computeAverageFrameBuildTimeMillis(),
       '90th_percentile_frame_build_time_millis': computePercentileFrameBuildTimeMillis(90.0),
       '99th_percentile_frame_build_time_millis': computePercentileFrameBuildTimeMillis(99.0),
diff --git a/packages/flutter_driver/test/flutter_driver_test.dart b/packages/flutter_driver/test/flutter_driver_test.dart
index e932047..c532f51 100644
--- a/packages/flutter_driver/test/flutter_driver_test.dart
+++ b/packages/flutter_driver/test/flutter_driver_test.dart
@@ -300,7 +300,7 @@
 
         when(mockPeer.sendRequest('_getVMTimeline')).thenAnswer((Invocation invocation) async {
           log.add('download');
-          return <String, dynamic> {
+          return <String, dynamic>{
             'traceEvents': <dynamic>[
               <String, String>{
                 'name': 'test event',
@@ -359,7 +359,7 @@
           });
 
         when(mockPeer.sendRequest('_getVMTimeline')).thenAnswer((Invocation invocation) async {
-          return <String, dynamic> {
+          return <String, dynamic>{
             'traceEvents': <dynamic>[
               <String, String>{
                 'name': 'test event',
diff --git a/packages/flutter_driver/test/src/timeline_summary_test.dart b/packages/flutter_driver/test/src/timeline_summary_test.dart
index e5d5b94..38fc0be 100644
--- a/packages/flutter_driver/test/src/timeline_summary_test.dart
+++ b/packages/flutter_driver/test/src/timeline_summary_test.dart
@@ -21,15 +21,22 @@
     }
 
     Map<String, dynamic> build(int timeStamp, int duration) => <String, dynamic>{
-      'name': 'Frame', 'ph': 'X', 'ts': timeStamp, 'dur': duration,
+      'name': 'Frame',
+      'ph': 'X',
+      'ts': timeStamp,
+      'dur': duration,
     };
 
     Map<String, dynamic> begin(int timeStamp) => <String, dynamic>{
-      'name': 'GPURasterizer::Draw', 'ph': 'B', 'ts': timeStamp,
+      'name': 'GPURasterizer::Draw',
+      'ph': 'B',
+      'ts': timeStamp,
     };
 
     Map<String, dynamic> end(int timeStamp) => <String, dynamic>{
-      'name': 'GPURasterizer::Draw', 'ph': 'E', 'ts': timeStamp,
+      'name': 'GPURasterizer::Draw',
+      'ph': 'E',
+      'ts': timeStamp,
     };
 
     List<Map<String, dynamic>> rasterizeTimeSequenceInMillis(List<int> sequence) {
diff --git a/packages/flutter_test/lib/src/binding.dart b/packages/flutter_test/lib/src/binding.dart
index 767b188..6c1ab7a 100644
--- a/packages/flutter_test/lib/src/binding.dart
+++ b/packages/flutter_test/lib/src/binding.dart
@@ -231,7 +231,8 @@
   /// [AutomatedTestWidgetsFlutterBinding] implementation to increase the
   /// current timeout. See [AutomatedTestWidgetsFlutterBinding.addTime] for
   /// details. The value is ignored by the [LiveTestWidgetsFlutterBinding].
-  Future<T> runAsync<T>(Future<T> callback(), {
+  Future<T> runAsync<T>(
+    Future<T> callback(), {
     Duration additionalTime = const Duration(milliseconds: 1000),
   });
 
@@ -740,7 +741,8 @@
   }
 
   @override
-  Future<T> runAsync<T>(Future<T> callback(), {
+  Future<T> runAsync<T>(
+    Future<T> callback(), {
     Duration additionalTime = const Duration(milliseconds: 1000),
   }) {
     assert(additionalTime != null);
@@ -1249,7 +1251,8 @@
   }
 
   @override
-  Future<T> runAsync<T>(Future<T> callback(), {
+  Future<T> runAsync<T>(
+    Future<T> callback(), {
     Duration additionalTime = const Duration(milliseconds: 1000),
   }) async {
     assert(() {
diff --git a/packages/flutter_test/lib/src/finders.dart b/packages/flutter_test/lib/src/finders.dart
index 4968f03..214995f 100644
--- a/packages/flutter_test/lib/src/finders.dart
+++ b/packages/flutter_test/lib/src/finders.dart
@@ -654,7 +654,9 @@
 }
 
 class _DescendantFinder extends Finder {
-  _DescendantFinder(this.ancestor, this.descendant, {
+  _DescendantFinder(
+    this.ancestor,
+    this.descendant, {
     this.matchRoot = false,
     bool skipOffstage = true,
   }) : super(skipOffstage: skipOffstage);
diff --git a/packages/flutter_test/lib/src/widget_tester.dart b/packages/flutter_test/lib/src/widget_tester.dart
index 9063cc1..085ab36 100644
--- a/packages/flutter_test/lib/src/widget_tester.dart
+++ b/packages/flutter_test/lib/src/widget_tester.dart
@@ -409,7 +409,8 @@
   /// are required to wait for the returned future to complete before calling
   /// this method again. Attempts to do otherwise will result in a
   /// [TestFailure] error being thrown.
-  Future<T> runAsync<T>(Future<T> callback(), {
+  Future<T> runAsync<T>(
+    Future<T> callback(), {
     Duration additionalTime = const Duration(milliseconds: 1000),
   }) => binding.runAsync<T>(callback, additionalTime: additionalTime);
 
diff --git a/packages/flutter_test/lib/src/window.dart b/packages/flutter_test/lib/src/window.dart
index d4111f7..65b8a3c 100644
--- a/packages/flutter_test/lib/src/window.dart
+++ b/packages/flutter_test/lib/src/window.dart
@@ -315,9 +315,11 @@
   }
 
   @override
-  void sendPlatformMessage(String name,
-                           ByteData data,
-                           PlatformMessageResponseCallback callback) {
+  void sendPlatformMessage(
+    String name,
+    ByteData data,
+    PlatformMessageResponseCallback callback,
+  ) {
     _window.sendPlatformMessage(name, data, callback);
   }
 
diff --git a/packages/flutter_test/test/finders_test.dart b/packages/flutter_test/test/finders_test.dart
index 93c2671..6615983 100644
--- a/packages/flutter_test/test/finders_test.dart
+++ b/packages/flutter_test/test/finders_test.dart
@@ -162,6 +162,5 @@
   void describeSemanticsConfiguration(SemanticsConfiguration config) {
     super.describeSemanticsConfiguration(config);
     config..label = label..textDirection = TextDirection.ltr;
-
   }
-}
\ No newline at end of file
+}
diff --git a/packages/flutter_tools/bin/fuchsia_attach.dart b/packages/flutter_tools/bin/fuchsia_attach.dart
index 97e14b7..04f713f 100644
--- a/packages/flutter_tools/bin/fuchsia_attach.dart
+++ b/packages/flutter_tools/bin/fuchsia_attach.dart
@@ -113,7 +113,7 @@
         platformKernelDill: platformKernelDill,
         flutterPatchedSdk: flutterPatchedSdk,
       ),
-    }
+    },
   );
 }
 
diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart
index 5c66f96..d8a7326 100644
--- a/packages/flutter_tools/lib/src/android/android_sdk.dart
+++ b/packages/flutter_tools/lib/src/android/android_sdk.dart
@@ -588,7 +588,8 @@
 }
 
 class AndroidSdkVersion implements Comparable<AndroidSdkVersion> {
-  AndroidSdkVersion._(this.sdk, {
+  AndroidSdkVersion._(
+    this.sdk, {
     @required this.sdkLevel,
     @required this.platformName,
     @required this.buildToolsVersion,
diff --git a/packages/flutter_tools/lib/src/android/android_studio.dart b/packages/flutter_tools/lib/src/android/android_studio.dart
index 58c7ca0..8457d26 100644
--- a/packages/flutter_tools/lib/src/android/android_studio.dart
+++ b/packages/flutter_tools/lib/src/android/android_studio.dart
@@ -30,9 +30,13 @@
 String get javaPath => androidStudio?.javaPath;
 
 class AndroidStudio implements Comparable<AndroidStudio> {
-  AndroidStudio(this.directory,
-      {Version version, this.configured, this.studioAppName = 'AndroidStudio', this.presetPluginsPath})
-      : version = version ?? Version.unknown {
+  AndroidStudio(
+    this.directory, {
+    Version version,
+    this.configured,
+    this.studioAppName = 'AndroidStudio',
+    this.presetPluginsPath,
+  }) : version = version ?? Version.unknown {
     _init();
   }
 
diff --git a/packages/flutter_tools/lib/src/build_info.dart b/packages/flutter_tools/lib/src/build_info.dart
index 2e3322b..60babd6 100644
--- a/packages/flutter_tools/lib/src/build_info.dart
+++ b/packages/flutter_tools/lib/src/build_info.dart
@@ -10,7 +10,9 @@
 
 /// Information about a build to be performed or used.
 class BuildInfo {
-  const BuildInfo(this.mode, this.flavor, {
+  const BuildInfo(
+    this.mode,
+    this.flavor, {
     this.trackWidgetCreation = false,
     this.compilationTraceFilePath,
     this.createBaseline = false,
diff --git a/packages/flutter_tools/lib/src/build_runner/build_runner.dart b/packages/flutter_tools/lib/src/build_runner/build_runner.dart
index 1684690..c4dddce 100644
--- a/packages/flutter_tools/lib/src/build_runner/build_runner.dart
+++ b/packages/flutter_tools/lib/src/build_runner/build_runner.dart
@@ -119,7 +119,8 @@
   }
 
   @override
-  Future<CodegenDaemon> daemon(FlutterProject flutterProject, {
+  Future<CodegenDaemon> daemon(
+    FlutterProject flutterProject, {
     String mainPath,
     bool linkPlatformKernelIn = false,
     bool targetProductVm = false,
diff --git a/packages/flutter_tools/lib/src/commands/daemon.dart b/packages/flutter_tools/lib/src/commands/daemon.dart
index e884b4b..a4e1524 100644
--- a/packages/flutter_tools/lib/src/commands/daemon.dart
+++ b/packages/flutter_tools/lib/src/commands/daemon.dart
@@ -528,7 +528,7 @@
     return app.stop().then<bool>(
       (void value) => true,
       onError: (dynamic error, StackTrace stack) {
-        _sendAppEvent(app, 'log', <String, dynamic>{ 'log': '$error', 'error': true });
+        _sendAppEvent(app, 'log', <String, dynamic>{'log': '$error', 'error': true});
         app.closeLogger();
         _apps.remove(app);
         return false;
@@ -546,7 +546,7 @@
     return app.detach().then<bool>(
       (void value) => true,
       onError: (dynamic error, StackTrace stack) {
-        _sendAppEvent(app, 'log', <String, dynamic>{ 'log': '$error', 'error': true });
+        _sendAppEvent(app, 'log', <String, dynamic>{'log': '$error', 'error': true});
         app.closeLogger();
         _apps.remove(app);
         return false;
@@ -559,7 +559,7 @@
   }
 
   void _sendAppEvent(AppInstance app, String name, [ Map<String, dynamic> args ]) {
-    final Map<String, dynamic> eventArgs = <String, dynamic> {'appId': app.id};
+    final Map<String, dynamic> eventArgs = <String, dynamic>{'appId': app.id};
     if (args != null)
       eventArgs.addAll(args);
     sendEvent('app.$name', eventArgs);
@@ -951,7 +951,7 @@
     if (parent != null) {
       parent.printTrace(message);
     } else {
-      _sendLogEvent(<String, dynamic>{ 'log': message, 'trace': true });
+      _sendLogEvent(<String, dynamic>{'log': message, 'trace': true});
     }
   }
 
diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart
index 507ea45..e72ae1a 100644
--- a/packages/flutter_tools/lib/src/commands/run.dart
+++ b/packages/flutter_tools/lib/src/commands/run.dart
@@ -34,7 +34,7 @@
       )
       ..addFlag('verbose-system-logs',
         negatable: false,
-        help: 'Include verbose logging from the flutter engine.'
+        help: 'Include verbose logging from the flutter engine.',
       )
       ..addOption('route',
         help: 'Which route to load when running the app.',
@@ -203,7 +203,7 @@
             ? getNameForTargetPlatform(await devices[0].targetPlatform)
             : 'multiple';
 
-    return <String, String>{ 'cd3': '$isEmulator', 'cd4': deviceType };
+    return <String, String>{'cd3': '$isEmulator', 'cd4': deviceType};
   }
 
   @override
diff --git a/packages/flutter_tools/lib/src/commands/update_packages.dart b/packages/flutter_tools/lib/src/commands/update_packages.dart
index a019bb8..fd4f51a76 100644
--- a/packages/flutter_tools/lib/src/commands/update_packages.dart
+++ b/packages/flutter_tools/lib/src/commands/update_packages.dart
@@ -909,7 +909,10 @@
 
 /// A dependency, as represented by a line (or two) from a pubspec.yaml file.
 class PubspecDependency extends PubspecLine {
-  PubspecDependency(String line, this.name, this.suffix, {
+  PubspecDependency(
+    String line,
+    this.name,
+    this.suffix, {
     @required this.isTransitive,
     DependencyKind kind,
     this.version,
diff --git a/packages/flutter_tools/lib/src/compile.dart b/packages/flutter_tools/lib/src/compile.dart
index 72341b6..4ba74eb 100644
--- a/packages/flutter_tools/lib/src/compile.dart
+++ b/packages/flutter_tools/lib/src/compile.dart
@@ -412,7 +412,8 @@
 /// The wrapper is intended to stay resident in memory as user changes, reloads,
 /// restarts the Flutter app.
 class ResidentCompiler {
-  ResidentCompiler(this._sdkRoot, {
+  ResidentCompiler(
+    this._sdkRoot, {
     bool trackWidgetCreation = false,
     String packagesPath,
     List<String> fileSystemRoots,
diff --git a/packages/flutter_tools/lib/src/dart/pub.dart b/packages/flutter_tools/lib/src/dart/pub.dart
index 60bcc8e..3ca0c05 100644
--- a/packages/flutter_tools/lib/src/dart/pub.dart
+++ b/packages/flutter_tools/lib/src/dart/pub.dart
@@ -76,7 +76,7 @@
   bool upgrade = false,
   bool offline = false,
   bool checkLastModified = true,
-  bool skipPubspecYamlCheck = false
+  bool skipPubspecYamlCheck = false,
 }) async {
   directory ??= fs.currentDirectory.path;
 
diff --git a/packages/flutter_tools/lib/src/devfs.dart b/packages/flutter_tools/lib/src/devfs.dart
index 73e0214..021c5b9 100644
--- a/packages/flutter_tools/lib/src/devfs.dart
+++ b/packages/flutter_tools/lib/src/devfs.dart
@@ -241,7 +241,7 @@
     try {
       return await vmService.vm.invokeRpcRaw(
         '_writeDevFSFile',
-        params: <String, dynamic> {
+        params: <String, dynamic>{
           'fsName': fsName,
           'uri': deviceUri.toString(),
           'fileContents': fileContents,
@@ -337,8 +337,11 @@
 
 // Basic statistics for DevFS update operation.
 class UpdateFSReport {
-  UpdateFSReport({bool success = false,
-    int invalidatedSourcesCount = 0, int syncedBytes = 0}) {
+  UpdateFSReport({
+    bool success = false,
+    int invalidatedSourcesCount = 0,
+    int syncedBytes = 0,
+  }) {
     _success = success;
     _invalidatedSourcesCount = invalidatedSourcesCount;
     _syncedBytes = syncedBytes;
diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart
index 15ab883..1ff9e38 100644
--- a/packages/flutter_tools/lib/src/device.dart
+++ b/packages/flutter_tools/lib/src/device.dart
@@ -364,7 +364,8 @@
 }
 
 class DebuggingOptions {
-  DebuggingOptions.enabled(this.buildInfo, {
+  DebuggingOptions.enabled(
+    this.buildInfo, {
     this.startPaused = false,
     this.enableSoftwareRendering = false,
     this.skiaDeterministicRendering = false,
diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
index e5ed42e..9aa1fb5 100644
--- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
@@ -213,8 +213,7 @@
   _FuchsiaPortForwarder _portForwarder;
 
   @override
-  void clearLogs() {
-  }
+  void clearLogs() { }
 
   @override
   bool get supportsScreenshot => false;
@@ -306,7 +305,9 @@
 }
 
 class FuchsiaIsolateDiscoveryProtocol {
-  FuchsiaIsolateDiscoveryProtocol(this._device, this._isolateName, [
+  FuchsiaIsolateDiscoveryProtocol(
+    this._device,
+    this._isolateName, [
     this._vmServiceConnector = _kDefaultFuchsiaIsolateDiscoveryConnector,
     this._pollOnce = false,
   ]);
diff --git a/packages/flutter_tools/lib/src/ios/code_signing.dart b/packages/flutter_tools/lib/src/ios/code_signing.dart
index 3820e87..9111b5f 100644
--- a/packages/flutter_tools/lib/src/ios/code_signing.dart
+++ b/packages/flutter_tools/lib/src/ios/code_signing.dart
@@ -163,7 +163,7 @@
   if (await opensslProcess.exitCode != 0)
     return null;
 
-  return <String, String> {
+  return <String, String>{
     'DEVELOPMENT_TEAM': _certificateOrganizationalUnitExtractionPattern
       .firstMatch(opensslOutput)
       ?.group(1),
diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart
index 8903b5a..efa4962 100644
--- a/packages/flutter_tools/lib/src/ios/devices.dart
+++ b/packages/flutter_tools/lib/src/ios/devices.dart
@@ -389,8 +389,7 @@
   DevicePortForwarder get portForwarder => _portForwarder ??= _IOSDevicePortForwarder(this);
 
   @override
-  void clearLogs() {
-  }
+  void clearLogs() { }
 
   @override
   bool get supportsScreenshot => iMobileDevice.isInstalled;
diff --git a/packages/flutter_tools/lib/src/ios/mac.dart b/packages/flutter_tools/lib/src/ios/mac.dart
index 50bdf32..19410ef 100644
--- a/packages/flutter_tools/lib/src/ios/mac.dart
+++ b/packages/flutter_tools/lib/src/ios/mac.dart
@@ -625,15 +625,13 @@
 }
 
 class XcodeBuildResult {
-  XcodeBuildResult(
-    {
-      @required this.success,
-      this.output,
-      this.stdout,
-      this.stderr,
-      this.xcodeBuildExecution,
-    }
-  );
+  XcodeBuildResult({
+    @required this.success,
+    this.output,
+    this.stdout,
+    this.stderr,
+    this.xcodeBuildExecution,
+  });
 
   final bool success;
   final String output;
@@ -645,14 +643,12 @@
 
 /// Describes an invocation of a Xcode build command.
 class XcodeBuildExecution {
-  XcodeBuildExecution(
-    {
-      @required this.buildCommands,
-      @required this.appDirectory,
-      @required this.buildForPhysicalDevice,
-      @required this.buildSettings,
-    }
-  );
+  XcodeBuildExecution({
+    @required this.buildCommands,
+    @required this.appDirectory,
+    @required this.buildForPhysicalDevice,
+    @required this.buildSettings,
+  });
 
   /// The original list of Xcode build commands used to produce this build result.
   final List<String> buildCommands;
diff --git a/packages/flutter_tools/lib/src/macos/application_package.dart b/packages/flutter_tools/lib/src/macos/application_package.dart
index 31fd59e..28d8ade 100644
--- a/packages/flutter_tools/lib/src/macos/application_package.dart
+++ b/packages/flutter_tools/lib/src/macos/application_package.dart
@@ -9,7 +9,7 @@
 import '../globals.dart';
 import '../ios/plist_utils.dart' as plist;
 
- /// Tests whether a [FileSystemEntity] is an macOS bundle directory
+/// Tests whether a [FileSystemEntity] is an macOS bundle directory
 bool _isBundleDirectory(FileSystemEntity entity) =>
     entity is Directory && entity.path.endsWith('.app');
 
diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart
index 16eb458..f38cc5b 100644
--- a/packages/flutter_tools/lib/src/resident_runner.dart
+++ b/packages/flutter_tools/lib/src/resident_runner.dart
@@ -28,7 +28,8 @@
 import 'vmservice.dart';
 
 class FlutterDevice {
-  FlutterDevice(this.device, {
+  FlutterDevice(
+    this.device, {
     @required this.trackWidgetCreation,
     this.dillOutputPath,
     this.fileSystemRoots,
@@ -48,7 +49,8 @@
        );
 
   /// Create a [FlutterDevice] with optional code generation enabled.
-  static Future<FlutterDevice> create(Device device, {
+  static Future<FlutterDevice> create(
+    Device device, {
     @required bool trackWidgetCreation,
     String dillOutputPath,
     List<String> fileSystemRoots,
@@ -482,7 +484,8 @@
 
 // Shared code between different resident application runners.
 abstract class ResidentRunner {
-  ResidentRunner(this.flutterDevices, {
+  ResidentRunner(
+    this.flutterDevices, {
     this.target,
     this.debuggingOptions,
     this.usesTerminalUI = true,
diff --git a/packages/flutter_tools/lib/src/run_hot.dart b/packages/flutter_tools/lib/src/run_hot.dart
index 50f445d..1bfe832 100644
--- a/packages/flutter_tools/lib/src/run_hot.dart
+++ b/packages/flutter_tools/lib/src/run_hot.dart
@@ -93,8 +93,11 @@
     benchmarkData[name].add(value);
   }
 
-  Future<void> _reloadSourcesService(String isolateId,
-      { bool force = false, bool pause = false }) async {
+  Future<void> _reloadSourcesService(
+    String isolateId, {
+    bool force = false,
+    bool pause = false,
+  }) async {
     // TODO(cbernaschina): check that isolateId is the id of the UI isolate.
     final OperationResult result = await restart(pauseAfterRestart: pause);
     if (!result.isOk) {
@@ -589,7 +592,7 @@
     }
   }
 
-  Future<OperationResult> _reloadSources({ bool pause = false, String reason, void Function(String message) onSlow, }) async {
+  Future<OperationResult> _reloadSources({ bool pause = false, String reason, void Function(String message) onSlow }) async {
     final Map<String, String> analyticsParameters = <String, String>{};
     if (reason != null) {
       analyticsParameters[kEventReloadReasonParameterName] = reason;
diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart
index 545e773..7adcd72 100644
--- a/packages/flutter_tools/lib/src/vmservice.dart
+++ b/packages/flutter_tools/lib/src/vmservice.dart
@@ -424,8 +424,10 @@
   /// Factory constructor given a [ServiceObjectOwner] and a service map,
   /// upgrade the map into a proper [ServiceObject]. This function always
   /// returns a new instance and does not interact with caches.
-  factory ServiceObject._fromMap(ServiceObjectOwner owner,
-                                 Map<String, dynamic> map) {
+  factory ServiceObject._fromMap(
+    ServiceObjectOwner owner,
+    Map<String, dynamic> map,
+  ) {
     if (map == null)
       return null;
 
@@ -873,7 +875,7 @@
 
   /// Create a new development file system on the device.
   Future<Map<String, dynamic>> createDevFS(String fsName) {
-    return invokeRpcRaw('_createDevFS', params: <String, dynamic> {'fsName': fsName});
+    return invokeRpcRaw('_createDevFS', params: <String, dynamic>{'fsName': fsName});
   }
 
   /// List the development file system son the device.
@@ -928,7 +930,7 @@
     Uri assetsDirectory,
   ) {
     return invokeRpc<ServiceMap>('_flutter.runInView',
-      params: <String, dynamic> {
+      params: <String, dynamic>{
         'viewId': viewId,
         'mainScript': main.toString(),
         'packagesFile': packages.toString(),
diff --git a/packages/flutter_tools/lib/src/vscode/vscode.dart b/packages/flutter_tools/lib/src/vscode/vscode.dart
index f2fac47..0eab763 100644
--- a/packages/flutter_tools/lib/src/vscode/vscode.dart
+++ b/packages/flutter_tools/lib/src/vscode/vscode.dart
@@ -57,8 +57,11 @@
     }
   }
 
-  factory VsCode.fromDirectory(String installPath, String extensionDirectory,
-      { String edition }) {
+  factory VsCode.fromDirectory(
+    String installPath,
+    String extensionDirectory, {
+    String edition,
+  }) {
     final String packageJsonPath =
         fs.path.join(installPath, 'resources', 'app', 'package.json');
     final String versionString = _getVersionFromPackageJson(packageJsonPath);
diff --git a/packages/flutter_tools/test/artifacts_test.dart b/packages/flutter_tools/test/artifacts_test.dart
index 986bff0..00b17e4 100644
--- a/packages/flutter_tools/test/artifacts_test.dart
+++ b/packages/flutter_tools/test/artifacts_test.dart
@@ -35,7 +35,7 @@
           artifacts.getArtifactPath(Artifact.flutterTester),
           fs.path.join(tempDir.path, 'bin', 'cache', 'artifacts', 'engine', 'linux-x64', 'flutter_tester'),
       );
-    }, overrides: <Type, Generator> {
+    }, overrides: <Type, Generator>{
       Cache: () => Cache(rootOverride: tempDir),
       Platform: () => FakePlatform(operatingSystem: 'linux'),
     });
@@ -53,7 +53,7 @@
           artifacts.getEngineType(TargetPlatform.darwin_x64),
           'darwin-x64',
       );
-    }, overrides: <Type, Generator> {
+    }, overrides: <Type, Generator>{
       Cache: () => Cache(rootOverride: tempDir),
       Platform: () => FakePlatform(operatingSystem: 'linux'),
     });
@@ -89,7 +89,7 @@
         artifacts.getArtifactPath(Artifact.engineDartSdkPath),
         fs.path.join(tempDir.path, 'out', 'host_debug_unopt', 'dart-sdk'),
       );
-    }, overrides: <Type, Generator> {
+    }, overrides: <Type, Generator>{
       Platform: () => FakePlatform(operatingSystem: 'linux'),
     });
 
@@ -106,7 +106,7 @@
           artifacts.getEngineType(TargetPlatform.darwin_x64),
           'android_debug_unopt',
       );
-    }, overrides: <Type, Generator> {
+    }, overrides: <Type, Generator>{
       Platform: () => FakePlatform(operatingSystem: 'linux'),
     });
   });
diff --git a/packages/flutter_tools/test/base/logger_test.dart b/packages/flutter_tools/test/base/logger_test.dart
index a1e7182..99c532f 100644
--- a/packages/flutter_tools/test/base/logger_test.dart
+++ b/packages/flutter_tools/test/base/logger_test.dart
@@ -36,7 +36,7 @@
                                              r'\[ (?: {0,2}\+[0-9]{1,3} ms|       )\] Oooh, I do I do I do\n$'));
       expect(mockLogger.traceText, '');
       expect(mockLogger.errorText, matches( r'^\[ (?: {0,2}\+[0-9]{1,3} ms|       )\] Helpless!\n$'));
-    }, overrides: <Type, Generator> {
+    }, overrides: <Type, Generator>{
       OutputPreferences: () => OutputPreferences(showColor: false),
       Platform: _kNoAnsiPlatform,
     });
@@ -57,7 +57,7 @@
       expect(
           mockLogger.errorText,
           matches('^$red' r'\[ (?: {0,2}\+[0-9]{1,3} ms|       )\] ' '${bold}Helpless!$resetBold$resetColor' r'\n$'));
-    }, overrides: <Type, Generator> {
+    }, overrides: <Type, Generator>{
       OutputPreferences: () => OutputPreferences(showColor: true),
       Platform: () => FakePlatform()..stdoutSupportsAnsi = true,
     });
diff --git a/packages/flutter_tools/test/base/os_utils_test.dart b/packages/flutter_tools/test/base/os_utils_test.dart
index 6df3407..ddfbefe 100644
--- a/packages/flutter_tools/test/base/os_utils_test.dart
+++ b/packages/flutter_tools/test/base/os_utils_test.dart
@@ -32,7 +32,7 @@
         // rwxr--r--
         expect(mode.substring(0, 3), endsWith('x'));
       }
-    }, overrides: <Type, Generator> {
+    }, overrides: <Type, Generator>{
       OperatingSystemUtils: () => OperatingSystemUtils(),
     });
   });
diff --git a/packages/flutter_tools/test/base/terminal_test.dart b/packages/flutter_tools/test/base/terminal_test.dart
index d5b4ef7..61268ea 100644
--- a/packages/flutter_tools/test/base/terminal_test.dart
+++ b/packages/flutter_tools/test/base/terminal_test.dart
@@ -44,7 +44,7 @@
           equals('${AnsiTerminal.colorCode(color)}output${AnsiTerminal.resetColor}'),
         );
       }
-    }, overrides: <Type, Generator> {
+    }, overrides: <Type, Generator>{
       OutputPreferences: () => OutputPreferences(showColor: true),
       Platform: () => FakePlatform()..stdoutSupportsAnsi = true,
     });
@@ -54,7 +54,7 @@
         terminal.bolden('output'),
         equals('${AnsiTerminal.bold}output${AnsiTerminal.resetBold}'),
       );
-    }, overrides: <Type, Generator> {
+    }, overrides: <Type, Generator>{
       OutputPreferences: () => OutputPreferences(showColor: true),
       Platform: () => FakePlatform()..stdoutSupportsAnsi = true,
     });
@@ -68,7 +68,7 @@
         terminal.color('non-bold ${terminal.bolden('output')} also non-bold', TerminalColor.blue),
         equals('${AnsiTerminal.blue}non-bold ${AnsiTerminal.bold}output${AnsiTerminal.resetBold} also non-bold${AnsiTerminal.resetColor}'),
       );
-    }, overrides: <Type, Generator> {
+    }, overrides: <Type, Generator>{
       OutputPreferences: () => OutputPreferences(showColor: true),
       Platform: () => FakePlatform()..stdoutSupportsAnsi = true,
     });
@@ -82,7 +82,7 @@
         terminal.bolden('non-color ${terminal.color('output', TerminalColor.blue)} also non-color'),
         equals('${AnsiTerminal.bold}non-color ${AnsiTerminal.blue}output${AnsiTerminal.resetColor} also non-color${AnsiTerminal.resetBold}'),
       );
-    }, overrides: <Type, Generator> {
+    }, overrides: <Type, Generator>{
       OutputPreferences: () => OutputPreferences(showColor: true),
       Platform: () => FakePlatform()..stdoutSupportsAnsi = true,
     });
@@ -96,7 +96,7 @@
         terminal.color('magenta ${terminal.color('output', TerminalColor.blue)} also magenta', TerminalColor.magenta),
         equals('${AnsiTerminal.magenta}magenta ${AnsiTerminal.blue}output${AnsiTerminal.resetColor}${AnsiTerminal.magenta} also magenta${AnsiTerminal.resetColor}'),
       );
-    }, overrides: <Type, Generator> {
+    }, overrides: <Type, Generator>{
       OutputPreferences: () => OutputPreferences(showColor: true),
       Platform: () => FakePlatform()..stdoutSupportsAnsi = true,
     });
@@ -110,7 +110,7 @@
         terminal.bolden('bold ${terminal.bolden('output')} still bold'),
         equals('${AnsiTerminal.bold}bold output still bold${AnsiTerminal.resetBold}'),
       );
-    }, overrides: <Type, Generator> {
+    }, overrides: <Type, Generator>{
       OutputPreferences: () => OutputPreferences(showColor: true),
       Platform: () => FakePlatform()..stdoutSupportsAnsi = true,
     });
diff --git a/packages/flutter_tools/test/build_info_test.dart b/packages/flutter_tools/test/build_info_test.dart
index acd2a34..854030e 100644
--- a/packages/flutter_tools/test/build_info_test.dart
+++ b/packages/flutter_tools/test/build_info_test.dart
@@ -9,12 +9,10 @@
 import 'src/context.dart';
 
 void main() {
-  setUpAll(() {
-  });
+  setUpAll(() { });
 
   group('Validate build number', () {
-    setUp(() async {
-    });
+    setUp(() async { });
 
     testUsingContext('CFBundleVersion for iOS', () async {
       String buildName = validatedBuildNumberForPlatform(TargetPlatform.ios, 'xyz');
@@ -34,8 +32,7 @@
   });
 
   group('Validate build name', () {
-    setUp(() async {
-    });
+    setUp(() async { });
 
     testUsingContext('CFBundleShortVersionString for iOS', () async {
       String buildName = validatedBuildNameForPlatform(TargetPlatform.ios, 'xyz');
diff --git a/packages/flutter_tools/test/commands/create_test.dart b/packages/flutter_tools/test/commands/create_test.dart
index 50d6aaa..f070223 100644
--- a/packages/flutter_tools/test/commands/create_test.dart
+++ b/packages/flutter_tools/test/commands/create_test.dart
@@ -24,7 +24,7 @@
 const String frameworkRevision = '12345678';
 const String frameworkChannel = 'omega';
 final Generator _kNoColorTerminalPlatform = () => FakePlatform.fromPlatform(const LocalPlatform())..stdoutSupportsAnsi = false;
-final Map<Type, Generator> noColorTerminalOverride = <Type, Generator> {
+final Map<Type, Generator> noColorTerminalOverride = <Type, Generator>{
   Platform: _kNoColorTerminalPlatform,
 };
 const String samplesIndexJson = '''[
@@ -900,7 +900,7 @@
     final List<String> args = <String>[
       'create',
       '--list-samples',
-      outputFile
+      outputFile,
     ];
 
     await runner.run(args);
@@ -918,7 +918,7 @@
     final List<String> args = <String>[
       'create',
       '--list-samples',
-      outputFile
+      outputFile,
     ];
 
     await expectLater(runner.run(args), throwsToolExit(exitCode: 2, message: 'Failed to write samples'));
diff --git a/packages/flutter_tools/test/commands/daemon_test.dart b/packages/flutter_tools/test/commands/daemon_test.dart
index 043de1e..c419bfa 100644
--- a/packages/flutter_tools/test/commands/daemon_test.dart
+++ b/packages/flutter_tools/test/commands/daemon_test.dart
@@ -123,7 +123,7 @@
         notifyingLogger: notifyingLogger,
       );
 
-      commands.add(<String, dynamic>{ 'id': 0, 'method': 'app.restart' });
+      commands.add(<String, dynamic>{'id': 0, 'method': 'app.restart'});
       final Map<String, dynamic> response = await responses.stream.firstWhere(_notEvent);
       expect(response['id'], 0);
       expect(response['error'], contains('appId is required'));
@@ -147,7 +147,7 @@
       commands.add(<String, dynamic>{
         'id': 0,
         'method': 'app.callServiceExtension',
-        'params': <String, String> {
+        'params': <String, String>{
           'methodName': 'ext.flutter.debugPaint',
         },
       });
@@ -171,7 +171,7 @@
         notifyingLogger: notifyingLogger,
       );
 
-      commands.add(<String, dynamic>{ 'id': 0, 'method': 'app.stop' });
+      commands.add(<String, dynamic>{'id': 0, 'method': 'app.stop'});
       final Map<String, dynamic> response = await responses.stream.firstWhere(_notEvent);
       expect(response['id'], 0);
       expect(response['error'], contains('appId is required'));
@@ -258,7 +258,7 @@
         notifyingLogger: notifyingLogger,
       );
 
-      commands.add(<String, dynamic>{ 'id': 0, 'method': 'emulator.launch' });
+      commands.add(<String, dynamic>{'id': 0, 'method': 'emulator.launch'});
       final Map<String, dynamic> response = await responses.stream.firstWhere(_notEvent);
       expect(response['id'], 0);
       expect(response['error'], contains('emulatorId is required'));
diff --git a/packages/flutter_tools/test/commands/version_test.dart b/packages/flutter_tools/test/commands/version_test.dart
index aed04a2..9f00c3d 100644
--- a/packages/flutter_tools/test/commands/version_test.dart
+++ b/packages/flutter_tools/test/commands/version_test.dart
@@ -108,12 +108,14 @@
   }
 
   @override
-  Future<Process> start(List<dynamic> command,
-      {String workingDirectory,
-      Map<String, String> environment,
-      bool includeParentEnvironment = true,
-      bool runInShell = false,
-      ProcessStartMode mode = ProcessStartMode.normal}) {
+  Future<Process> start(
+    List<dynamic> command, {
+    String workingDirectory,
+    Map<String, String> environment,
+    bool includeParentEnvironment = true,
+    bool runInShell = false,
+    ProcessStartMode mode = ProcessStartMode.normal,
+  }) {
     final Completer<Process> completer = Completer<Process>();
     completer.complete(MockProcess());
     return completer.future;
diff --git a/packages/flutter_tools/test/compile_test.dart b/packages/flutter_tools/test/compile_test.dart
index 2bf431e..5ec7075 100644
--- a/packages/flutter_tools/test/compile_test.dart
+++ b/packages/flutter_tools/test/compile_test.dart
@@ -532,9 +532,12 @@
   mockFrontendServerStdIn._stdInWrites.clear();
 }
 
-Future<void> _accept(StreamController<List<int>> streamController,
-    ResidentCompiler generator, MockStdIn mockFrontendServerStdIn,
-    String expected) async {
+Future<void> _accept(
+  StreamController<List<int>> streamController,
+  ResidentCompiler generator,
+  MockStdIn mockFrontendServerStdIn,
+  String expected,
+) async {
   // Put content into the output stream after generator.recompile gets
   // going few lines below, resets completer.
   generator.accept();
@@ -544,9 +547,13 @@
   mockFrontendServerStdIn._stdInWrites.clear();
 }
 
-Future<void> _reject(StreamController<List<int>> streamController,
-    ResidentCompiler generator, MockStdIn mockFrontendServerStdIn,
-    String mockCompilerOutput, String expected) async {
+Future<void> _reject(
+  StreamController<List<int>> streamController,
+  ResidentCompiler generator,
+  MockStdIn mockFrontendServerStdIn,
+  String mockCompilerOutput,
+  String expected,
+) async {
   // Put content into the output stream after generator.recompile gets
   // going few lines below, resets completer.
   scheduleMicrotask(() {
diff --git a/packages/flutter_tools/test/crash_reporting_test.dart b/packages/flutter_tools/test/crash_reporting_test.dart
index 9db92c0..8acabe2 100644
--- a/packages/flutter_tools/test/crash_reporting_test.dart
+++ b/packages/flutter_tools/test/crash_reporting_test.dart
@@ -151,7 +151,7 @@
           'version': 'test-version',
         },
       ));
-    }, overrides: <Type, Generator> {
+    }, overrides: <Type, Generator>{
       Platform: () => FakePlatform(
         operatingSystem: 'linux',
         environment: <String, String>{
diff --git a/packages/flutter_tools/test/hot_test.dart b/packages/flutter_tools/test/hot_test.dart
index 0425139..37ac83f 100644
--- a/packages/flutter_tools/test/hot_test.dart
+++ b/packages/flutter_tools/test/hot_test.dart
@@ -237,7 +237,7 @@
         ];
         await HotRunner(devices).cleanupAfterSignal();
         expect(shutdownTestingConfig.shutdownHookCalled, true);
-      }, overrides: <Type, Generator> {
+      }, overrides: <Type, Generator>{
         Artifacts: () => mockArtifacts,
         HotRunnerConfig: () => shutdownTestingConfig,
       });
@@ -252,7 +252,7 @@
         ];
         await HotRunner(devices).preStop();
         expect(shutdownTestingConfig.shutdownHookCalled, true);
-      }, overrides: <Type, Generator> {
+      }, overrides: <Type, Generator>{
         Artifacts: () => mockArtifacts,
         HotRunnerConfig: () => shutdownTestingConfig,
       });
diff --git a/packages/flutter_tools/test/ios/code_signing_test.dart b/packages/flutter_tools/test/ios/code_signing_test.dart
index c03773b..9d381a0 100644
--- a/packages/flutter_tools/test/ios/code_signing_test.dart
+++ b/packages/flutter_tools/test/ios/code_signing_test.dart
@@ -146,7 +146,7 @@
       expect(testLogger.statusText, contains('iPhone Developer: Profile 1 (1111AAAA11)'));
       expect(testLogger.errorText, isEmpty);
       verify(mockStdIn.write('This is a mock certificate'));
-      expect(signingConfigs, <String, String> {'DEVELOPMENT_TEAM': '3333CCCC33'});
+      expect(signingConfigs, <String, String>{'DEVELOPMENT_TEAM': '3333CCCC33'});
     },
     overrides: <Type, Generator>{
       ProcessManager: () => mockProcessManager,
@@ -217,7 +217,7 @@
       );
       expect(testLogger.errorText, isEmpty);
       verify(mockOpenSslStdIn.write('This is a mock certificate'));
-      expect(signingConfigs, <String, String> {'DEVELOPMENT_TEAM': '4444DDDD44'});
+      expect(signingConfigs, <String, String>{'DEVELOPMENT_TEAM': '4444DDDD44'});
 
       verify(config.setValue('ios-signing-cert', 'iPhone Developer: Profile 3 (3333CCCC33)'));
     },
@@ -288,7 +288,7 @@
       );
       expect(testLogger.errorText, isEmpty);
       verify(mockOpenSslStdIn.write('This is a mock certificate'));
-      expect(signingConfigs, <String, String> {'DEVELOPMENT_TEAM': '5555EEEE55'});
+      expect(signingConfigs, <String, String>{'DEVELOPMENT_TEAM': '5555EEEE55'});
     },
     overrides: <Type, Generator>{
       ProcessManager: () => mockProcessManager,
@@ -360,7 +360,7 @@
       );
       expect(testLogger.errorText, isEmpty);
       verify(mockOpenSslStdIn.write('This is a mock certificate'));
-      expect(signingConfigs, <String, String> {'DEVELOPMENT_TEAM': '4444DDDD44'});
+      expect(signingConfigs, <String, String>{'DEVELOPMENT_TEAM': '4444DDDD44'});
     },
     overrides: <Type, Generator>{
       ProcessManager: () => mockProcessManager,
@@ -432,7 +432,7 @@
         testLogger.statusText,
         contains('Certificate choice "iPhone Developer: Profile 3 (3333CCCC33)"'),
       );
-      expect(signingConfigs, <String, String> {'DEVELOPMENT_TEAM': '4444DDDD44'});
+      expect(signingConfigs, <String, String>{'DEVELOPMENT_TEAM': '4444DDDD44'});
       verify(config.setValue('ios-signing-cert', 'iPhone Developer: Profile 3 (3333CCCC33)'));
     },
     overrides: <Type, Generator>{
diff --git a/packages/flutter_tools/test/version_test.dart b/packages/flutter_tools/test/version_test.dart
index 9a57f9c..328e703 100644
--- a/packages/flutter_tools/test/version_test.dart
+++ b/packages/flutter_tools/test/version_test.dart
@@ -403,11 +403,12 @@
     expect(GitTagVersion.parse('v1.2.3-4-gx$hash').frameworkVersionFor(hash), '0.0.0-unknown');
     expect(testLogger.statusText, '');
     expect(testLogger.errorText, '');
-    expect(testLogger.traceText,
+    expect(
+      testLogger.traceText,
       'Could not interpret results of "git describe": x1.2.3-4-gabcdef\n'
       'Could not interpret results of "git describe": v1.0.0-unknown-0-gabcdef\n'
       'Could not interpret results of "git describe": beta-1-gabcdef\n'
-      'Could not interpret results of "git describe": v1.2.3-4-gxabcdef\n'
+      'Could not interpret results of "git describe": v1.2.3-4-gxabcdef\n',
     );
   });
 }
diff --git a/packages/flutter_tools/tool/daemon_client.dart b/packages/flutter_tools/tool/daemon_client.dart
index 8051c8a..6314565 100644
--- a/packages/flutter_tools/tool/daemon_client.dart
+++ b/packages/flutter_tools/tool/daemon_client.dart
@@ -40,7 +40,7 @@
     } else if (words.first == 'start') {
       _send(<String, dynamic>{
         'method': 'app.start',
-        'params': <String, dynamic> {
+        'params': <String, dynamic>{
           'deviceId': words[1],
           'projectDirectory': words[2],
           'launchMode': words[3],
@@ -50,7 +50,7 @@
       if (words.length > 1) {
         _send(<String, dynamic>{
           'method': 'app.stop',
-          'params': <String, dynamic> {'appId': words[1]},
+          'params': <String, dynamic>{'appId': words[1]},
         });
       } else {
         _send(<String, dynamic>{'method': 'app.stop'});
@@ -59,7 +59,7 @@
       if (words.length > 1) {
         _send(<String, dynamic>{
           'method': 'app.restart',
-          'params': <String, dynamic> {'appId': words[1]},
+          'params': <String, dynamic>{'appId': words[1]},
         });
       } else {
         _send(<String, dynamic>{'method': 'app.restart'});
