diff --git a/packages/flutter/lib/src/cupertino/nav_bar.dart b/packages/flutter/lib/src/cupertino/nav_bar.dart
index 361589c..6ec6603 100644
--- a/packages/flutter/lib/src/cupertino/nav_bar.dart
+++ b/packages/flutter/lib/src/cupertino/nav_bar.dart
@@ -809,7 +809,7 @@
 
   @override
   bool shouldRebuild(_LargeTitleNavigationBarSliverDelegate oldDelegate) {
-       return components != oldDelegate.components
+    return components != oldDelegate.components
         || userMiddle != oldDelegate.userMiddle
         || backgroundColor != oldDelegate.backgroundColor
         || border != oldDelegate.border
diff --git a/packages/flutter/lib/src/cupertino/theme.dart b/packages/flutter/lib/src/cupertino/theme.dart
index 4a8ebad..38fe2f2 100644
--- a/packages/flutter/lib/src/cupertino/theme.dart
+++ b/packages/flutter/lib/src/cupertino/theme.dart
@@ -254,10 +254,16 @@
         scaffoldBackgroundColor,
       );
 
-  @override final Brightness brightness;
-  @override final Color primaryColor;
-  @override final Color primaryContrastingColor;
-  @override final CupertinoTextThemeData textTheme;
-  @override final Color barBackgroundColor;
-  @override final Color scaffoldBackgroundColor;
+  @override
+  final Brightness brightness;
+  @override
+  final Color primaryColor;
+  @override
+  final Color primaryContrastingColor;
+  @override
+  final CupertinoTextThemeData textTheme;
+  @override
+  final Color barBackgroundColor;
+  @override
+  final Color scaffoldBackgroundColor;
 }
diff --git a/packages/flutter/lib/src/foundation/bitfield.dart b/packages/flutter/lib/src/foundation/bitfield.dart
index 5240bc0..e39a935 100644
--- a/packages/flutter/lib/src/foundation/bitfield.dart
+++ b/packages/flutter/lib/src/foundation/bitfield.dart
@@ -64,4 +64,4 @@
   void reset([ bool value = false ]) {
     _bits = value ? _allOnes : _allZeros;
   }
-}
\ No newline at end of file
+}
diff --git a/packages/flutter/lib/src/foundation/diagnostics.dart b/packages/flutter/lib/src/foundation/diagnostics.dart
index 5c0b812..3ee6b4e 100644
--- a/packages/flutter/lib/src/foundation/diagnostics.dart
+++ b/packages/flutter/lib/src/foundation/diagnostics.dart
@@ -1984,7 +1984,8 @@
     return _cachedBuilder;
   }
 
-  @override DiagnosticsTreeStyle get style {
+  @override
+  DiagnosticsTreeStyle get style {
     return super.style ?? _builder.defaultDiagnosticsTreeStyle;
   }
 
diff --git a/packages/flutter/lib/src/material/button_theme.dart b/packages/flutter/lib/src/material/button_theme.dart
index 8efdcd4..e735931 100644
--- a/packages/flutter/lib/src/material/button_theme.dart
+++ b/packages/flutter/lib/src/material/button_theme.dart
@@ -291,12 +291,12 @@
   EdgeInsetsGeometry get padding {
     if (_padding != null)
       return _padding;
-   switch (textTheme) {
+    switch (textTheme) {
       case ButtonTextTheme.normal:
       case ButtonTextTheme.accent:
         return const EdgeInsets.symmetric(horizontal: 16.0);
       case ButtonTextTheme.primary:
-       return const EdgeInsets.symmetric(horizontal: 24.0);
+        return const EdgeInsets.symmetric(horizontal: 24.0);
     }
     assert(false);
     return EdgeInsets.zero;
diff --git a/packages/flutter/lib/src/material/dropdown.dart b/packages/flutter/lib/src/material/dropdown.dart
index 5da068a..092125e 100644
--- a/packages/flutter/lib/src/material/dropdown.dart
+++ b/packages/flutter/lib/src/material/dropdown.dart
@@ -350,7 +350,7 @@
 }
 
 class _DropdownRoutePage<T> extends StatelessWidget {
- const  _DropdownRoutePage({
+  const _DropdownRoutePage({
     Key key,
     this.route,
     this.constraints,
diff --git a/packages/flutter/lib/src/material/slider.dart b/packages/flutter/lib/src/material/slider.dart
index 19263a6..32da622 100644
--- a/packages/flutter/lib/src/material/slider.dart
+++ b/packages/flutter/lib/src/material/slider.dart
@@ -1094,4 +1094,4 @@
       onChanged((value - _semanticActionUnit).clamp(0.0, 1.0));
     }
   }
-}
\ No newline at end of file
+}
diff --git a/packages/flutter/lib/src/painting/continuous_rectangle_border.dart b/packages/flutter/lib/src/painting/continuous_rectangle_border.dart
index 0a314ec..780caaa 100644
--- a/packages/flutter/lib/src/painting/continuous_rectangle_border.dart
+++ b/packages/flutter/lib/src/painting/continuous_rectangle_border.dart
@@ -163,4 +163,4 @@
   String toString() {
     return '$runtimeType($side, $borderRadius)';
   }
-}
\ No newline at end of file
+}
diff --git a/packages/flutter/lib/src/widgets/framework.dart b/packages/flutter/lib/src/widgets/framework.dart
index cbdea16..9c61fa5 100644
--- a/packages/flutter/lib/src/widgets/framework.dart
+++ b/packages/flutter/lib/src/widgets/framework.dart
@@ -3416,7 +3416,8 @@
   }
 
   /// A short, textual description of this element.
-  @override String toStringShort() {
+  @override
+  String toStringShort() {
     return widget != null ? '${widget.toStringShort()}' : '[$runtimeType]';
   }
 
diff --git a/packages/flutter/lib/src/widgets/sliver.dart b/packages/flutter/lib/src/widgets/sliver.dart
index d5e4544..5c4ece2 100644
--- a/packages/flutter/lib/src/widgets/sliver.dart
+++ b/packages/flutter/lib/src/widgets/sliver.dart
@@ -1172,9 +1172,9 @@
 
   @override
   void visitChildren(ElementVisitor visitor) {
-   // The toList() is to make a copy so that the underlying list can be modified by
-   // the visitor:
-   assert(!_childElements.values.any((Element child) => child == null));
+    // The toList() is to make a copy so that the underlying list can be modified by
+    // the visitor:
+    assert(!_childElements.values.any((Element child) => child == null));
     _childElements.values.toList().forEach(visitor);
   }
 
diff --git a/packages/flutter/test/material/app_test.dart b/packages/flutter/test/material/app_test.dart
index 64e605d..5cc30aa 100644
--- a/packages/flutter/test/material/app_test.dart
+++ b/packages/flutter/test/material/app_test.dart
@@ -285,7 +285,7 @@
     expect(await result, equals('all done'));
   });
 
-    testWidgets('Two-step initial route', (WidgetTester tester) async {
+  testWidgets('Two-step initial route', (WidgetTester tester) async {
     final Map<String, WidgetBuilder> routes = <String, WidgetBuilder>{
       '/': (BuildContext context) => const Text('route "/"'),
       '/a': (BuildContext context) => const Text('route "/a"'),
diff --git a/packages/flutter/test/material/dialog_theme_test.dart b/packages/flutter/test/material/dialog_theme_test.dart
index cdcc622..c682fdc 100644
--- a/packages/flutter/test/material/dialog_theme_test.dart
+++ b/packages/flutter/test/material/dialog_theme_test.dart
@@ -238,4 +238,4 @@
     final RenderParagraph content = _getTextRenderObjectFromDialog(tester, contentText);
     expect(content.text.style.color, contentTextStyle.color);
   });
-}
\ No newline at end of file
+}
diff --git a/packages/flutter/test/material/input_decorator_test.dart b/packages/flutter/test/material/input_decorator_test.dart
index 1cc5a4c..101a1eb 100644
--- a/packages/flutter/test/material/input_decorator_test.dart
+++ b/packages/flutter/test/material/input_decorator_test.dart
@@ -1114,7 +1114,7 @@
     expect(tester.getRect(find.text('test')).left, 12.0);
   });
 
-    testWidgets('counter text has correct right margin - LTR, dense', (WidgetTester tester) async {
+  testWidgets('counter text has correct right margin - LTR, dense', (WidgetTester tester) async {
     await tester.pumpWidget(
       buildInputDecorator(
         // isEmpty: false (default)
diff --git a/packages/flutter/test/material/slider_test.dart b/packages/flutter/test/material/slider_test.dart
index 3cf2a86..f855df6 100644
--- a/packages/flutter/test/material/slider_test.dart
+++ b/packages/flutter/test/material/slider_test.dart
@@ -1422,4 +1422,4 @@
     expect(await tester.pumpAndSettle(const Duration(milliseconds: 100)), equals(1));
     await gesture.up();
   });
-}
\ No newline at end of file
+}
diff --git a/packages/flutter/test/material/slider_theme_test.dart b/packages/flutter/test/material/slider_theme_test.dart
index acd5211..77523cf 100644
--- a/packages/flutter/test/material/slider_theme_test.dart
+++ b/packages/flutter/test/material/slider_theme_test.dart
@@ -760,4 +760,4 @@
       ),
     ),
   );
-}
\ No newline at end of file
+}
diff --git a/packages/flutter/test/material/switch_list_tile_test.dart b/packages/flutter/test/material/switch_list_tile_test.dart
index 53a729e..8eaf0ed 100644
--- a/packages/flutter/test/material/switch_list_tile_test.dart
+++ b/packages/flutter/test/material/switch_list_tile_test.dart
@@ -63,7 +63,7 @@
   testWidgets('SwitchListTile.adaptive delegates to', (WidgetTester tester) async {
     bool value = false;
 
-     Widget buildFrame(TargetPlatform platform) {
+    Widget buildFrame(TargetPlatform platform) {
       return MaterialApp(
         theme: ThemeData(platform: platform),
         home: StatefulBuilder(
diff --git a/packages/flutter/test/material/theme_test.dart b/packages/flutter/test/material/theme_test.dart
index 83ebe09..12b316c 100644
--- a/packages/flutter/test/material/theme_test.dart
+++ b/packages/flutter/test/material/theme_test.dart
@@ -665,26 +665,46 @@
   final TextStyle _delegate;
 
   // Do make sure that all the properties correctly forward to the _delegate.
-  @override Color get color => _delegate.color;
-  @override Color get backgroundColor => _delegate.backgroundColor;
-  @override String get debugLabel => _delegate.debugLabel;
-  @override TextDecoration get decoration => _delegate.decoration;
-  @override Color get decorationColor => _delegate.decorationColor;
-  @override TextDecorationStyle get decorationStyle => _delegate.decorationStyle;
-  @override String get fontFamily => _delegate.fontFamily;
-  @override List<String> get fontFamilyFallback => _delegate.fontFamilyFallback;
-  @override double get fontSize => _delegate.fontSize;
-  @override FontStyle get fontStyle => _delegate.fontStyle;
-  @override FontWeight get fontWeight => _delegate.fontWeight;
-  @override double get height => _delegate.height;
-  @override Locale get locale => _delegate.locale;
-  @override ui.Paint get foreground => _delegate.foreground;
-  @override ui.Paint get background => _delegate.background;
-  @override bool get inherit => _delegate.inherit;
-  @override double get letterSpacing => _delegate.letterSpacing;
-  @override TextBaseline get textBaseline => _delegate.textBaseline;
-  @override double get wordSpacing => _delegate.wordSpacing;
-  @override List<Shadow> get shadows => _delegate.shadows;
+  @override
+  Color get color => _delegate.color;
+  @override
+  Color get backgroundColor => _delegate.backgroundColor;
+  @override
+  String get debugLabel => _delegate.debugLabel;
+  @override
+  TextDecoration get decoration => _delegate.decoration;
+  @override
+  Color get decorationColor => _delegate.decorationColor;
+  @override
+  TextDecorationStyle get decorationStyle => _delegate.decorationStyle;
+  @override
+  String get fontFamily => _delegate.fontFamily;
+  @override
+  List<String> get fontFamilyFallback => _delegate.fontFamilyFallback;
+  @override
+  double get fontSize => _delegate.fontSize;
+  @override
+  FontStyle get fontStyle => _delegate.fontStyle;
+  @override
+  FontWeight get fontWeight => _delegate.fontWeight;
+  @override
+  double get height => _delegate.height;
+  @override
+  Locale get locale => _delegate.locale;
+  @override
+  ui.Paint get foreground => _delegate.foreground;
+  @override
+  ui.Paint get background => _delegate.background;
+  @override
+  bool get inherit => _delegate.inherit;
+  @override
+  double get letterSpacing => _delegate.letterSpacing;
+  @override
+  TextBaseline get textBaseline => _delegate.textBaseline;
+  @override
+  double get wordSpacing => _delegate.wordSpacing;
+  @override
+  List<Shadow> get shadows => _delegate.shadows;
 
   @override
   String toString({ DiagnosticLevel minLevel = DiagnosticLevel.debug }) =>
diff --git a/packages/flutter/test/painting/box_fit_test.dart b/packages/flutter/test/painting/box_fit_test.dart
index a95f537..4f4249b 100644
--- a/packages/flutter/test/painting/box_fit_test.dart
+++ b/packages/flutter/test/painting/box_fit_test.dart
@@ -37,37 +37,37 @@
 }
 
 void _testZeroAndNegativeSizes(BoxFit fit) {
-    FittedSizes result;
+  FittedSizes result;
 
-    result = applyBoxFit(fit, const Size(-400.0, 2000.0), const Size(100.0, 1000.0));
-    expect(result.source, equals(Size.zero));
-    expect(result.destination, equals(Size.zero));
+  result = applyBoxFit(fit, const Size(-400.0, 2000.0), const Size(100.0, 1000.0));
+  expect(result.source, equals(Size.zero));
+  expect(result.destination, equals(Size.zero));
 
-    result = applyBoxFit(fit, const Size(400.0, -2000.0), const Size(100.0, 1000.0));
-    expect(result.source, equals(Size.zero));
-    expect(result.destination, equals(Size.zero));
+  result = applyBoxFit(fit, const Size(400.0, -2000.0), const Size(100.0, 1000.0));
+  expect(result.source, equals(Size.zero));
+  expect(result.destination, equals(Size.zero));
 
-    result = applyBoxFit(fit, const Size(400.0, 2000.0), const Size(-100.0, 1000.0));
-    expect(result.source, equals(Size.zero));
-    expect(result.destination, equals(Size.zero));
+  result = applyBoxFit(fit, const Size(400.0, 2000.0), const Size(-100.0, 1000.0));
+  expect(result.source, equals(Size.zero));
+  expect(result.destination, equals(Size.zero));
 
-    result = applyBoxFit(fit, const Size(400.0, 2000.0), const Size(100.0, -1000.0));
-    expect(result.source, equals(Size.zero));
-    expect(result.destination, equals(Size.zero));
+  result = applyBoxFit(fit, const Size(400.0, 2000.0), const Size(100.0, -1000.0));
+  expect(result.source, equals(Size.zero));
+  expect(result.destination, equals(Size.zero));
 
-    result = applyBoxFit(fit, const Size(0.0, 2000.0), const Size(100.0, 1000.0));
-    expect(result.source, equals(Size.zero));
-    expect(result.destination, equals(Size.zero));
+  result = applyBoxFit(fit, const Size(0.0, 2000.0), const Size(100.0, 1000.0));
+  expect(result.source, equals(Size.zero));
+  expect(result.destination, equals(Size.zero));
 
-    result = applyBoxFit(fit, const Size(400.0, 0.0), const Size(100.0, 1000.0));
-    expect(result.source, equals(Size.zero));
-    expect(result.destination, equals(Size.zero));
+  result = applyBoxFit(fit, const Size(400.0, 0.0), const Size(100.0, 1000.0));
+  expect(result.source, equals(Size.zero));
+  expect(result.destination, equals(Size.zero));
 
-    result = applyBoxFit(fit, const Size(400.0, 2000.0), const Size(0.0, 1000.0));
-    expect(result.source, equals(Size.zero));
-    expect(result.destination, equals(Size.zero));
+  result = applyBoxFit(fit, const Size(400.0, 2000.0), const Size(0.0, 1000.0));
+  expect(result.source, equals(Size.zero));
+  expect(result.destination, equals(Size.zero));
 
-    result = applyBoxFit(fit, const Size(400.0, 2000.0), const Size(100.0, 0.0));
-    expect(result.source, equals(Size.zero));
-    expect(result.destination, equals(Size.zero));
+  result = applyBoxFit(fit, const Size(400.0, 2000.0), const Size(100.0, 0.0));
+  expect(result.source, equals(Size.zero));
+  expect(result.destination, equals(Size.zero));
 }
diff --git a/packages/flutter/test/painting/image_stream_test.dart b/packages/flutter/test/painting/image_stream_test.dart
index 35531f9..e78334f 100644
--- a/packages/flutter/test/painting/image_stream_test.dart
+++ b/packages/flutter/test/painting/image_stream_test.dart
@@ -103,7 +103,7 @@
     expect(mockCodec.numFramesAsked, 1);
   });
 
-   testWidgets('getNextFrame future fails', (WidgetTester tester) async {
+  testWidgets('getNextFrame future fails', (WidgetTester tester) async {
      final MockCodec mockCodec = MockCodec();
      mockCodec.frameCount = 1;
      final Completer<Codec> codecCompleter = Completer<Codec>();
diff --git a/packages/flutter/test/rendering/cached_intrinsics_test.dart b/packages/flutter/test/rendering/cached_intrinsics_test.dart
index 241181b..2b9f792 100644
--- a/packages/flutter/test/rendering/cached_intrinsics_test.dart
+++ b/packages/flutter/test/rendering/cached_intrinsics_test.dart
@@ -8,10 +8,14 @@
 class RenderTestBox extends RenderBox {
   double value = 0.0;
   double next() { value += 1.0; return value; }
-  @override double computeMinIntrinsicWidth(double height) => next();
-  @override double computeMaxIntrinsicWidth(double height) => next();
-  @override double computeMinIntrinsicHeight(double width) => next();
-  @override double computeMaxIntrinsicHeight(double width) => next();
+  @override
+  double computeMinIntrinsicWidth(double height) => next();
+  @override
+  double computeMaxIntrinsicWidth(double height) => next();
+  @override
+  double computeMinIntrinsicHeight(double width) => next();
+  @override
+  double computeMaxIntrinsicHeight(double width) => next();
 }
 
 void main() {
diff --git a/packages/flutter/test/rendering/dynamic_intrinsics_test.dart b/packages/flutter/test/rendering/dynamic_intrinsics_test.dart
index f82d4dc..7450aac 100644
--- a/packages/flutter/test/rendering/dynamic_intrinsics_test.dart
+++ b/packages/flutter/test/rendering/dynamic_intrinsics_test.dart
@@ -15,10 +15,14 @@
     markNeedsLayout();
   }
 
-  @override double computeMinIntrinsicWidth(double height) => dimension;
-  @override double computeMaxIntrinsicWidth(double height) => dimension;
-  @override double computeMinIntrinsicHeight(double width) => dimension;
-  @override double computeMaxIntrinsicHeight(double width) => dimension;
+  @override
+  double computeMinIntrinsicWidth(double height) => dimension;
+  @override
+  double computeMaxIntrinsicWidth(double height) => dimension;
+  @override
+  double computeMinIntrinsicHeight(double width) => dimension;
+  @override
+  double computeMaxIntrinsicHeight(double width) => dimension;
 
   @override
   void performLayout() {
diff --git a/packages/flutter/test/services/keyboard_key_test.dart b/packages/flutter/test/services/keyboard_key_test.dart
index 96e3d7c..438f159 100644
--- a/packages/flutter/test/services/keyboard_key_test.dart
+++ b/packages/flutter/test/services/keyboard_key_test.dart
@@ -51,4 +51,4 @@
       expect(key1, equals(key2));
     });
   });
-}
\ No newline at end of file
+}
diff --git a/packages/flutter/test/widgets/media_query_test.dart b/packages/flutter/test/widgets/media_query_test.dart
index c06d5e2..43baa9c 100644
--- a/packages/flutter/test/widgets/media_query_test.dart
+++ b/packages/flutter/test/widgets/media_query_test.dart
@@ -93,58 +93,58 @@
     expect(copied.platformBrightness, Brightness.dark);
   });
 
- testWidgets('MediaQuery.removePadding removes specified padding', (WidgetTester tester) async {
-   const Size size = Size(2.0, 4.0);
-   const double devicePixelRatio = 2.0;
-   const double textScaleFactor = 1.2;
-   const EdgeInsets padding = EdgeInsets.only(top: 1.0, right: 2.0, left: 3.0, bottom: 4.0);
-   const EdgeInsets viewInsets = EdgeInsets.only(top: 5.0, right: 6.0, left: 7.0, bottom: 8.0);
+  testWidgets('MediaQuery.removePadding removes specified padding', (WidgetTester tester) async {
+    const Size size = Size(2.0, 4.0);
+    const double devicePixelRatio = 2.0;
+    const double textScaleFactor = 1.2;
+    const EdgeInsets padding = EdgeInsets.only(top: 1.0, right: 2.0, left: 3.0, bottom: 4.0);
+    const EdgeInsets viewInsets = EdgeInsets.only(top: 5.0, right: 6.0, left: 7.0, bottom: 8.0);
 
-   MediaQueryData unpadded;
-   await tester.pumpWidget(
-     MediaQuery(
-       data: const MediaQueryData(
-         size: size,
-         devicePixelRatio: devicePixelRatio,
-         textScaleFactor: textScaleFactor,
-         padding: padding,
-         viewInsets: viewInsets,
-         alwaysUse24HourFormat: true,
-         accessibleNavigation: true,
-         invertColors: true,
-         disableAnimations: true,
-         boldText: true,
-       ),
-       child: Builder(
-         builder: (BuildContext context) {
-           return MediaQuery.removePadding(
-             context: context,
-             removeLeft: true,
-             removeTop: true,
-             removeRight: true,
-             removeBottom: true,
-             child: Builder(
-               builder: (BuildContext context) {
-                 unpadded = MediaQuery.of(context);
-                 return Container();
-               }
-             ),
-           );
-         },
-       ),
-     )
-   );
+    MediaQueryData unpadded;
+    await tester.pumpWidget(
+      MediaQuery(
+        data: const MediaQueryData(
+          size: size,
+          devicePixelRatio: devicePixelRatio,
+          textScaleFactor: textScaleFactor,
+          padding: padding,
+          viewInsets: viewInsets,
+          alwaysUse24HourFormat: true,
+          accessibleNavigation: true,
+          invertColors: true,
+          disableAnimations: true,
+          boldText: true,
+        ),
+        child: Builder(
+          builder: (BuildContext context) {
+            return MediaQuery.removePadding(
+              context: context,
+              removeLeft: true,
+              removeTop: true,
+              removeRight: true,
+              removeBottom: true,
+              child: Builder(
+                builder: (BuildContext context) {
+                  unpadded = MediaQuery.of(context);
+                  return Container();
+                }
+              ),
+            );
+          },
+        ),
+      )
+    );
 
-   expect(unpadded.size, size);
-   expect(unpadded.devicePixelRatio, devicePixelRatio);
-   expect(unpadded.textScaleFactor, textScaleFactor);
-   expect(unpadded.padding, EdgeInsets.zero);
-   expect(unpadded.viewInsets, viewInsets);
-   expect(unpadded.alwaysUse24HourFormat, true);
-   expect(unpadded.accessibleNavigation, true);
-   expect(unpadded.invertColors, true);
-   expect(unpadded.disableAnimations, true);
-   expect(unpadded.boldText, true);
+    expect(unpadded.size, size);
+    expect(unpadded.devicePixelRatio, devicePixelRatio);
+    expect(unpadded.textScaleFactor, textScaleFactor);
+    expect(unpadded.padding, EdgeInsets.zero);
+    expect(unpadded.viewInsets, viewInsets);
+    expect(unpadded.alwaysUse24HourFormat, true);
+    expect(unpadded.accessibleNavigation, true);
+    expect(unpadded.invertColors, true);
+    expect(unpadded.disableAnimations, true);
+    expect(unpadded.boldText, true);
   });
 
   testWidgets('MediaQuery.removeViewInsets removes specified viewInsets', (WidgetTester tester) async {
@@ -201,32 +201,32 @@
     expect(unpadded.boldText, true);
   });
 
- testWidgets('MediaQuery.textScaleFactorOf', (WidgetTester tester) async {
-   double outsideTextScaleFactor;
-   double insideTextScaleFactor;
+  testWidgets('MediaQuery.textScaleFactorOf', (WidgetTester tester) async {
+    double outsideTextScaleFactor;
+    double insideTextScaleFactor;
 
-   await tester.pumpWidget(
-     Builder(
-       builder: (BuildContext context) {
-         outsideTextScaleFactor = MediaQuery.textScaleFactorOf(context);
-         return MediaQuery(
-           data: const MediaQueryData(
-             textScaleFactor: 4.0,
-           ),
-           child: Builder(
-             builder: (BuildContext context) {
-               insideTextScaleFactor = MediaQuery.textScaleFactorOf(context);
-               return Container();
-             },
-           ),
-         );
-       },
-     ),
-   );
+    await tester.pumpWidget(
+      Builder(
+        builder: (BuildContext context) {
+          outsideTextScaleFactor = MediaQuery.textScaleFactorOf(context);
+          return MediaQuery(
+            data: const MediaQueryData(
+              textScaleFactor: 4.0,
+            ),
+            child: Builder(
+              builder: (BuildContext context) {
+                insideTextScaleFactor = MediaQuery.textScaleFactorOf(context);
+                return Container();
+              },
+            ),
+          );
+        },
+      ),
+    );
 
-   expect(outsideTextScaleFactor, 1.0);
-   expect(insideTextScaleFactor, 4.0);
- });
+    expect(outsideTextScaleFactor, 1.0);
+    expect(insideTextScaleFactor, 4.0);
+  });
 
   testWidgets('MediaQuery.platformBrightnessOf', (WidgetTester tester) async {
     Brightness outsideBrightness;
diff --git a/packages/flutter/test/widgets/modal_barrier_test.dart b/packages/flutter/test/widgets/modal_barrier_test.dart
index 5198718..d80ec98 100644
--- a/packages/flutter/test/widgets/modal_barrier_test.dart
+++ b/packages/flutter/test/widgets/modal_barrier_test.dart
@@ -217,23 +217,23 @@
 class FirstWidget extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
-  return GestureDetector(
-    onTap: () {
-      Navigator.pushNamed(context, '/modal');
-    },
-    child: Container(
-      child: const Text('X'),
-    ),
-  );
+    return GestureDetector(
+      onTap: () {
+        Navigator.pushNamed(context, '/modal');
+      },
+      child: Container(
+        child: const Text('X'),
+      ),
+    );
   }
 }
 
 class SecondWidget extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
-  return const ModalBarrier(
-    key: ValueKey<String>('barrier'),
-    dismissible: true,
-  );
+    return const ModalBarrier(
+      key: ValueKey<String>('barrier'),
+      dismissible: true,
+    );
   }
 }
diff --git a/packages/flutter/test/widgets/sliver_constraints_test.dart b/packages/flutter/test/widgets/sliver_constraints_test.dart
index 972ace5..90f5595 100644
--- a/packages/flutter/test/widgets/sliver_constraints_test.dart
+++ b/packages/flutter/test/widgets/sliver_constraints_test.dart
@@ -40,4 +40,4 @@
     final RenderSliver lastRenderSliver = renderViewport.lastChild;
     expect(lastRenderSliver.constraints.precedingScrollExtent, double.infinity);
   });
-}
\ No newline at end of file
+}
diff --git a/packages/flutter/test/widgets/slivers_appbar_pinned_test.dart b/packages/flutter/test/widgets/slivers_appbar_pinned_test.dart
index 013e8e7..abb7e8c 100644
--- a/packages/flutter/test/widgets/slivers_appbar_pinned_test.dart
+++ b/packages/flutter/test/widgets/slivers_appbar_pinned_test.dart
@@ -321,7 +321,7 @@
 
   @override
   double get minExtent {
-   return shouldThrow ? throw FlutterError('Unavailable minExtent') : 100.0;
+    return shouldThrow ? throw FlutterError('Unavailable minExtent') : 100.0;
   }
 
   @override
diff --git a/packages/flutter_localizations/test/translations_test.dart b/packages/flutter_localizations/test/translations_test.dart
index 3be798b..7d69158 100644
--- a/packages/flutter_localizations/test/translations_test.dart
+++ b/packages/flutter_localizations/test/translations_test.dart
@@ -247,7 +247,7 @@
     expect(localizations is MaterialLocalizationZh, true);
   });
 
-testWidgets('Serbian resolution', (WidgetTester tester) async {
+  testWidgets('Serbian resolution', (WidgetTester tester) async {
     Locale locale = const Locale.fromSubtags(languageCode: 'sr', scriptCode: null, countryCode: null);
     expect(GlobalMaterialLocalizations.delegate.isSupported(locale), isTrue);
     MaterialLocalizations localizations = await GlobalMaterialLocalizations.delegate.load(locale);
diff --git a/packages/flutter_test/lib/src/accessibility.dart b/packages/flutter_test/lib/src/accessibility.dart
index 9d0d3db..777a411 100644
--- a/packages/flutter_test/lib/src/accessibility.dart
+++ b/packages/flutter_test/lib/src/accessibility.dart
@@ -137,7 +137,7 @@
 
   @override
   FutureOr<Evaluation> evaluate(WidgetTester tester) {
-   final SemanticsNode root = tester.binding.pipelineOwner.semanticsOwner.rootSemanticsNode;
+    final SemanticsNode root = tester.binding.pipelineOwner.semanticsOwner.rootSemanticsNode;
     Evaluation traverse(SemanticsNode node) {
       Evaluation result = const Evaluation.pass();
       node.visitChildren((SemanticsNode child) {
@@ -262,8 +262,8 @@
         return result;
       final List<int> subset = _subsetToRect(byteData, paintBounds, image.width, image.height);
       // Node was too far off screen.
-     if (subset.isEmpty)
-       return result;
+      if (subset.isEmpty)
+        return result;
       final _ContrastReport report = _ContrastReport(subset);
       final double contrastRatio = report.contrastRatio();
       const double delta = -0.01;
diff --git a/packages/flutter_test/lib/src/binding.dart b/packages/flutter_test/lib/src/binding.dart
index c376781..82cc99a 100644
--- a/packages/flutter_test/lib/src/binding.dart
+++ b/packages/flutter_test/lib/src/binding.dart
@@ -1742,4 +1742,4 @@
 
   @override
   String value(String name) => null;
-}
\ No newline at end of file
+}
diff --git a/packages/flutter_test/lib/src/matchers.dart b/packages/flutter_test/lib/src/matchers.dart
index 0c3f78a..66b85d9 100644
--- a/packages/flutter_test/lib/src/matchers.dart
+++ b/packages/flutter_test/lib/src/matchers.dart
@@ -1327,18 +1327,18 @@
   }
 
   bool assertRoundedRectangle(ShapeBorderClipper shapeClipper, BorderRadius borderRadius, Map<dynamic, dynamic> matchState) {
-      if (shapeClipper.shape.runtimeType != RoundedRectangleBorder)
-        return failWithDescription(matchState, 'had shape border: ${shapeClipper.shape}');
-      final RoundedRectangleBorder border = shapeClipper.shape;
-      if (border.borderRadius != borderRadius)
-        return failWithDescription(matchState, 'had borderRadius: ${border.borderRadius}');
-      return true;
+    if (shapeClipper.shape.runtimeType != RoundedRectangleBorder)
+      return failWithDescription(matchState, 'had shape border: ${shapeClipper.shape}');
+    final RoundedRectangleBorder border = shapeClipper.shape;
+    if (border.borderRadius != borderRadius)
+      return failWithDescription(matchState, 'had borderRadius: ${border.borderRadius}');
+    return true;
   }
 
   bool assertCircle(ShapeBorderClipper shapeClipper, Map<dynamic, dynamic> matchState) {
-      if (shapeClipper.shape.runtimeType != CircleBorder)
-        return failWithDescription(matchState, 'had shape border: ${shapeClipper.shape}');
-      return true;
+    if (shapeClipper.shape.runtimeType != CircleBorder)
+      return failWithDescription(matchState, 'had shape border: ${shapeClipper.shape}');
+    return true;
   }
 
   @override
diff --git a/packages/flutter_test/lib/src/window.dart b/packages/flutter_test/lib/src/window.dart
index a5983fe..8e5b5e9 100644
--- a/packages/flutter_test/lib/src/window.dart
+++ b/packages/flutter_test/lib/src/window.dart
@@ -339,4 +339,4 @@
     clearTextScaleFactorTestValue();
     clearViewInsetsTestValue();
   }
-}
\ No newline at end of file
+}
diff --git a/packages/flutter_test/test/accessibility_test.dart b/packages/flutter_test/test/accessibility_test.dart
index 058d02b..0a36a42 100644
--- a/packages/flutter_test/test/accessibility_test.dart
+++ b/packages/flutter_test/test/accessibility_test.dart
@@ -362,7 +362,7 @@
     });
   });
 
-   group('Labeled tappable node guideline', () {
+  group('Labeled tappable node guideline', () {
     testWidgets('Passes when node is labeled', (WidgetTester tester) async {
       final SemanticsHandle handle = tester.ensureSemantics();
       await tester.pumpWidget(_boilerplate(Semantics(
diff --git a/packages/flutter_test/test/window_test.dart b/packages/flutter_test/test/window_test.dart
index 6aad356..0fcbad5 100644
--- a/packages/flutter_test/test/window_test.dart
+++ b/packages/flutter_test/test/window_test.dart
@@ -253,4 +253,4 @@
 
   @override
   final bool reduceMotion;
-}
\ No newline at end of file
+}
diff --git a/packages/flutter_tools/lib/src/application_package.dart b/packages/flutter_tools/lib/src/application_package.dart
index 82816b7..61a13bf 100644
--- a/packages/flutter_tools/lib/src/application_package.dart
+++ b/packages/flutter_tools/lib/src/application_package.dart
@@ -98,7 +98,7 @@
       return null;
     }
 
-     final List<String> aaptArgs = <String>[
+    final List<String> aaptArgs = <String>[
        aaptPath,
       'dump',
       'xmltree',
diff --git a/packages/flutter_tools/lib/src/build_runner/build_script_generator.dart b/packages/flutter_tools/lib/src/build_runner/build_script_generator.dart
index 137ef53..bde12be 100644
--- a/packages/flutter_tools/lib/src/build_runner/build_script_generator.dart
+++ b/packages/flutter_tools/lib/src/build_runner/build_script_generator.dart
@@ -279,4 +279,4 @@
 
   /// Whether [child] specifies that it wants to run before [parent].
   bool _mustRunBefore(BuilderDefinition parent, BuilderDefinition child) => child.runsBefore.contains(parent.key);
-}
\ No newline at end of file
+}
diff --git a/packages/flutter_tools/lib/src/commands/generate.dart b/packages/flutter_tools/lib/src/commands/generate.dart
index 71b0a8a..2b0ed3c 100644
--- a/packages/flutter_tools/lib/src/commands/generate.dart
+++ b/packages/flutter_tools/lib/src/commands/generate.dart
@@ -27,4 +27,4 @@
     await codeGenerator.generate(mainPath: argResults['target']);
     return null;
   }
-}
\ No newline at end of file
+}
diff --git a/packages/flutter_tools/lib/src/convert.dart b/packages/flutter_tools/lib/src/convert.dart
index 2aedb81..9d8b9c1 100644
--- a/packages/flutter_tools/lib/src/convert.dart
+++ b/packages/flutter_tools/lib/src/convert.dart
@@ -46,4 +46,4 @@
     }
     return result;
   }
-}
\ No newline at end of file
+}
diff --git a/packages/flutter_tools/lib/src/devfs.dart b/packages/flutter_tools/lib/src/devfs.dart
index 05e9292..e6dabb1 100644
--- a/packages/flutter_tools/lib/src/devfs.dart
+++ b/packages/flutter_tools/lib/src/devfs.dart
@@ -386,20 +386,16 @@
     this.rootDirectory, {
     String packagesFilePath,
   }) : _operations = ServiceProtocolDevFSOperations(serviceProtocol),
-       _httpWriter = _DevFSHttpWriter(fsName, serviceProtocol) {
-    _packagesFilePath =
-        packagesFilePath ?? fs.path.join(rootDirectory.path, kPackagesFileName);
-  }
+       _httpWriter = _DevFSHttpWriter(fsName, serviceProtocol),
+       _packagesFilePath = packagesFilePath ?? fs.path.join(rootDirectory.path, kPackagesFileName);
 
   DevFS.operations(
     this._operations,
     this.fsName,
     this.rootDirectory, {
     String packagesFilePath,
-  }) : _httpWriter = null {
-       _packagesFilePath =
-           packagesFilePath ?? fs.path.join(rootDirectory.path, kPackagesFileName);
-  }
+  }) : _httpWriter = null,
+       _packagesFilePath = packagesFilePath ?? fs.path.join(rootDirectory.path, kPackagesFileName);
 
   final DevFSOperations _operations;
   final _DevFSHttpWriter _httpWriter;
diff --git a/packages/flutter_tools/lib/src/flutter_manifest.dart b/packages/flutter_tools/lib/src/flutter_manifest.dart
index 6ad2e69..0c094f7 100644
--- a/packages/flutter_tools/lib/src/flutter_manifest.dart
+++ b/packages/flutter_tools/lib/src/flutter_manifest.dart
@@ -435,4 +435,4 @@
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
index ffbe9dd..9a13ea6 100644
--- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
@@ -39,7 +39,8 @@
   FuchsiaDevice _device;
   ApplicationPackage _app;
 
-  @override String get name => _device.name;
+  @override
+  String get name => _device.name;
 
   Stream<String> _logLines;
   @override
diff --git a/packages/flutter_tools/lib/src/macos/application_package.dart b/packages/flutter_tools/lib/src/macos/application_package.dart
index 71c26aa..31fd59e 100644
--- a/packages/flutter_tools/lib/src/macos/application_package.dart
+++ b/packages/flutter_tools/lib/src/macos/application_package.dart
@@ -16,13 +16,13 @@
 abstract class MacOSApp extends ApplicationPackage {
   MacOSApp({@required String projectBundleId}) : super(id: projectBundleId);
 
-   /// Creates a new [MacOSApp] from an existing app bundle.
-   ///
-   /// `applicationBinary` is the path to the framework directory created by an
-   /// Xcode build. By default, this is located under
-   /// "~/Library/Developer/Xcode/DerivedData/" and contains an executable
-   /// which is expected to start the application and send the observatory
-   /// port over stdout.
+  /// Creates a new [MacOSApp] from an existing app bundle.
+  ///
+  /// `applicationBinary` is the path to the framework directory created by an
+  /// Xcode build. By default, this is located under
+  /// "~/Library/Developer/Xcode/DerivedData/" and contains an executable
+  /// which is expected to start the application and send the observatory
+  /// port over stdout.
   factory MacOSApp.fromPrebuiltApp(FileSystemEntity applicationBinary) {
     final FileSystemEntityType entityType = fs.typeSync(applicationBinary.path);
     if (entityType == FileSystemEntityType.notFound) {
@@ -71,7 +71,7 @@
   String get executable;
 }
 
- class PrebuiltMacOSApp extends MacOSApp {
+class PrebuiltMacOSApp extends MacOSApp {
   PrebuiltMacOSApp({
     @required this.bundleDir,
     @required this.bundleName,
diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart
index 91a0ef8..f14e2a6 100644
--- a/packages/flutter_tools/lib/src/project.dart
+++ b/packages/flutter_tools/lib/src/project.dart
@@ -467,7 +467,7 @@
 
   final FlutterProject parent;
 
-   Future<void> ensureReadyForPlatformSpecificTooling() async {
+  Future<void> ensureReadyForPlatformSpecificTooling() async {
     /// Generate index.html in build/web. Eventually we could support
     /// a custom html under the web sub directory.
     final Directory outputDir = fs.directory(getWebBuildDirectory());
diff --git a/packages/flutter_tools/test/build_runner/build_runner_test.dart b/packages/flutter_tools/test/build_runner/build_runner_test.dart
index fb7575a..0d3e56a 100644
--- a/packages/flutter_tools/test/build_runner/build_runner_test.dart
+++ b/packages/flutter_tools/test/build_runner/build_runner_test.dart
@@ -33,4 +33,4 @@
   });
 }
 
-class MockPlatform extends Mock implements Platform {}
\ No newline at end of file
+class MockPlatform extends Mock implements Platform {}
diff --git a/packages/flutter_tools/test/cache_test.dart b/packages/flutter_tools/test/cache_test.dart
index 079b045..1e7916f 100644
--- a/packages/flutter_tools/test/cache_test.dart
+++ b/packages/flutter_tools/test/cache_test.dart
@@ -162,4 +162,4 @@
 class MockRandomAccessFile extends Mock implements RandomAccessFile {}
 class MockCachedArtifact extends Mock implements CachedArtifact {}
 class MockInternetAddress extends Mock implements InternetAddress {}
-class MockCache extends Mock implements Cache {}
\ No newline at end of file
+class MockCache extends Mock implements Cache {}
diff --git a/packages/flutter_tools/test/commands/doctor_test.dart b/packages/flutter_tools/test/commands/doctor_test.dart
index dfa032e..5329d47 100644
--- a/packages/flutter_tools/test/commands/doctor_test.dart
+++ b/packages/flutter_tools/test/commands/doctor_test.dart
@@ -212,7 +212,7 @@
   });
 
 
- group('doctor with fake validators', () {
+  group('doctor with fake validators', () {
     testUsingContext('validate non-verbose output format for run without issues', () async {
       expect(await FakeQuietDoctor().diagnose(verbose: false), isTrue);
       expect(testLogger.statusText, equals(
diff --git a/packages/flutter_tools/test/integration/expression_evaluation_test.dart b/packages/flutter_tools/test/integration/expression_evaluation_test.dart
index 498c7f8..7ab5356 100644
--- a/packages/flutter_tools/test/integration/expression_evaluation_test.dart
+++ b/packages/flutter_tools/test/integration/expression_evaluation_test.dart
@@ -144,17 +144,16 @@
 
 Future<void> evaluateComplexExpressions(FlutterTestDriver flutter) async {
   final InstanceRef res = await flutter.evaluateInFrame('new DateTime.now().year');
-    expect(res.kind == InstanceKind.kInt && res.valueAsString == DateTime.now().year.toString(), isTrue);
+  expect(res.kind == InstanceKind.kInt && res.valueAsString == DateTime.now().year.toString(), isTrue);
 }
 
 Future<void> evaluateComplexReturningExpressions(FlutterTestDriver flutter) async {
   final DateTime now = DateTime.now();
-    final InstanceRef resp = await flutter.evaluateInFrame('new DateTime.now()');
-    expect(resp.classRef.name, equals('DateTime'));
-    // Ensure we got a reasonable approximation. The more accurate we try to
-    // make this, the more likely it'll fail due to differences in the time
-    // in the remote VM and the local VM at the time the code runs.
-    final InstanceRef res = await flutter.evaluate(resp.id, r'"$year-$month-$day"');
-    expect(res.valueAsString,
-        equals('${now.year}-${now.month}-${now.day}'));
+  final InstanceRef resp = await flutter.evaluateInFrame('new DateTime.now()');
+  expect(resp.classRef.name, equals('DateTime'));
+  // Ensure we got a reasonable approximation. The more accurate we try to
+  // make this, the more likely it'll fail due to differences in the time
+  // in the remote VM and the local VM at the time the code runs.
+  final InstanceRef res = await flutter.evaluate(resp.id, r'"$year-$month-$day"');
+  expect(res.valueAsString, equals('${now.year}-${now.month}-${now.day}'));
 }
diff --git a/packages/flutter_tools/test/web/compile_test.dart b/packages/flutter_tools/test/web/compile_test.dart
index 0316a33..2b7255b 100644
--- a/packages/flutter_tools/test/web/compile_test.dart
+++ b/packages/flutter_tools/test/web/compile_test.dart
@@ -51,4 +51,4 @@
 }
 
 class MockProcessManager extends Mock implements ProcessManager {}
-class MockProcess extends Mock implements Process {}
\ No newline at end of file
+class MockProcess extends Mock implements Process {}
