diff --git a/packages/flutter_tools/test/analytics_test.dart b/packages/flutter_tools/test/analytics_test.dart
index a2befdd..79d9c26 100644
--- a/packages/flutter_tools/test/analytics_test.dart
+++ b/packages/flutter_tools/test/analytics_test.dart
@@ -107,7 +107,7 @@
 
       expect(
         verify(mockUsage.sendTiming(captureAny, captureAny, captureAny, label: captureAnyNamed('label'))).captured,
-        <dynamic>['flutter', 'doctor', const Duration(milliseconds: 1000), 'success']
+        <dynamic>['flutter', 'doctor', const Duration(milliseconds: 1000), 'success'],
       );
     }, overrides: <Type, Generator>{
       SystemClock: () => mockClock,
@@ -126,7 +126,7 @@
 
       expect(
         verify(mockUsage.sendTiming(captureAny, captureAny, captureAny, label: captureAnyNamed('label'))).captured,
-        <dynamic>['flutter', 'doctor', const Duration(milliseconds: 1000), 'warning']
+        <dynamic>['flutter', 'doctor', const Duration(milliseconds: 1000), 'warning'],
       );
     }, overrides: <Type, Generator>{
       SystemClock: () => mockClock,
diff --git a/packages/flutter_tools/test/android/android_emulator_test.dart b/packages/flutter_tools/test/android/android_emulator_test.dart
index 28046c1..0e2a3a0 100644
--- a/packages/flutter_tools/test/android/android_emulator_test.dart
+++ b/packages/flutter_tools/test/android/android_emulator_test.dart
@@ -30,7 +30,7 @@
       final Map<String, String> properties = <String, String>{
         'hw.device.name': name,
         'hw.device.manufacturer': manufacturer,
-        'avd.ini.displayname': label
+        'avd.ini.displayname': label,
       };
       final AndroidEmulator emulator =
           AndroidEmulator(emulatorID, properties);
diff --git a/packages/flutter_tools/test/android/android_workflow_test.dart b/packages/flutter_tools/test/android/android_workflow_test.dart
index c988474..7a5e2c8 100644
--- a/packages/flutter_tools/test/android/android_workflow_test.dart
+++ b/packages/flutter_tools/test/android/android_workflow_test.dart
@@ -75,7 +75,7 @@
     when(sdk.sdkManagerPath).thenReturn('/foo/bar/sdkmanager');
     processManager.processFactory = processMetaFactory(<String>[
        '[=======================================] 100% Computing updates...             ',
-       'All SDK package licenses accepted.'
+       'All SDK package licenses accepted.',
     ]);
 
     final AndroidLicenseValidator licenseValidator = AndroidLicenseValidator();
diff --git a/packages/flutter_tools/test/artifacts_test.dart b/packages/flutter_tools/test/artifacts_test.dart
index 987546f..986bff0 100644
--- a/packages/flutter_tools/test/artifacts_test.dart
+++ b/packages/flutter_tools/test/artifacts_test.dart
@@ -29,33 +29,33 @@
     testUsingContext('getArtifactPath', () {
       expect(
           artifacts.getArtifactPath(Artifact.flutterFramework, TargetPlatform.ios, BuildMode.release),
-          fs.path.join(tempDir.path, 'bin', 'cache', 'artifacts', 'engine', 'ios-release', 'Flutter.framework')
+          fs.path.join(tempDir.path, 'bin', 'cache', 'artifacts', 'engine', 'ios-release', 'Flutter.framework'),
       );
       expect(
           artifacts.getArtifactPath(Artifact.flutterTester),
-          fs.path.join(tempDir.path, 'bin', 'cache', 'artifacts', 'engine', 'linux-x64', 'flutter_tester')
+          fs.path.join(tempDir.path, 'bin', 'cache', 'artifacts', 'engine', 'linux-x64', 'flutter_tester'),
       );
     }, overrides: <Type, Generator> {
       Cache: () => Cache(rootOverride: tempDir),
-      Platform: () => FakePlatform(operatingSystem: 'linux')
+      Platform: () => FakePlatform(operatingSystem: 'linux'),
     });
 
     testUsingContext('getEngineType', () {
       expect(
           artifacts.getEngineType(TargetPlatform.android_arm, BuildMode.debug),
-          'android-arm'
+          'android-arm',
       );
       expect(
           artifacts.getEngineType(TargetPlatform.ios, BuildMode.release),
-          'ios-release'
+          'ios-release',
       );
       expect(
           artifacts.getEngineType(TargetPlatform.darwin_x64),
-          'darwin-x64'
+          'darwin-x64',
       );
     }, overrides: <Type, Generator> {
       Cache: () => Cache(rootOverride: tempDir),
-      Platform: () => FakePlatform(operatingSystem: 'linux')
+      Platform: () => FakePlatform(operatingSystem: 'linux'),
     });
   });
 
@@ -79,35 +79,35 @@
     testUsingContext('getArtifactPath', () {
       expect(
           artifacts.getArtifactPath(Artifact.flutterFramework, TargetPlatform.ios, BuildMode.release),
-          fs.path.join(tempDir.path, 'out', 'android_debug_unopt', 'Flutter.framework')
+          fs.path.join(tempDir.path, 'out', 'android_debug_unopt', 'Flutter.framework'),
       );
       expect(
           artifacts.getArtifactPath(Artifact.flutterTester),
-          fs.path.join(tempDir.path, 'out', 'android_debug_unopt', 'flutter_tester')
+          fs.path.join(tempDir.path, 'out', 'android_debug_unopt', 'flutter_tester'),
       );
       expect(
         artifacts.getArtifactPath(Artifact.engineDartSdkPath),
-        fs.path.join(tempDir.path, 'out', 'host_debug_unopt', 'dart-sdk')
+        fs.path.join(tempDir.path, 'out', 'host_debug_unopt', 'dart-sdk'),
       );
     }, overrides: <Type, Generator> {
-      Platform: () => FakePlatform(operatingSystem: 'linux')
+      Platform: () => FakePlatform(operatingSystem: 'linux'),
     });
 
     testUsingContext('getEngineType', () {
       expect(
           artifacts.getEngineType(TargetPlatform.android_arm, BuildMode.debug),
-          'android_debug_unopt'
+          'android_debug_unopt',
       );
       expect(
           artifacts.getEngineType(TargetPlatform.ios, BuildMode.release),
-          'android_debug_unopt'
+          'android_debug_unopt',
       );
       expect(
           artifacts.getEngineType(TargetPlatform.darwin_x64),
-          'android_debug_unopt'
+          'android_debug_unopt',
       );
     }, overrides: <Type, Generator> {
-      Platform: () => FakePlatform(operatingSystem: 'linux')
+      Platform: () => FakePlatform(operatingSystem: 'linux'),
     });
   });
 }
diff --git a/packages/flutter_tools/test/base/file_system_test.dart b/packages/flutter_tools/test/base/file_system_test.dart
index 3652e79..80cca02 100644
--- a/packages/flutter_tools/test/base/file_system_test.dart
+++ b/packages/flutter_tools/test/base/file_system_test.dart
@@ -92,7 +92,7 @@
       expect(escapePath('foo\\bar\\cool.dart'), 'foo\\\\bar\\\\cool.dart');
       expect(escapePath('C:/foo/bar/cool.dart'), 'C:/foo/bar/cool.dart');
     }, overrides: <Type, Generator>{
-      Platform: () => FakePlatform(operatingSystem: 'windows')
+      Platform: () => FakePlatform(operatingSystem: 'windows'),
     });
 
     testUsingContext('on Linux', () {
@@ -100,7 +100,7 @@
       expect(escapePath('foo/bar/cool.dart'), 'foo/bar/cool.dart');
       expect(escapePath('foo\\cool.dart'), 'foo\\cool.dart');
     }, overrides: <Type, Generator>{
-      Platform: () => FakePlatform(operatingSystem: 'linux')
+      Platform: () => FakePlatform(operatingSystem: 'linux'),
     });
   });
 }
diff --git a/packages/flutter_tools/test/base/net_test.dart b/packages/flutter_tools/test/base/net_test.dart
index dd867ed..b379352 100644
--- a/packages/flutter_tools/test/base/net_test.dart
+++ b/packages/flutter_tools/test/base/net_test.dart
@@ -26,7 +26,7 @@
         'Download failed -- attempting retry 1 in 1 second...\n'
         'Download failed -- attempting retry 2 in 2 seconds...\n'
         'Download failed -- attempting retry 3 in 4 seconds...\n'
-        'Download failed -- attempting retry 4 in 8 seconds...\n'
+        'Download failed -- attempting retry 4 in 8 seconds...\n',
       );
     });
     expect(testLogger.errorText, isEmpty);
@@ -49,7 +49,7 @@
         'Download failed -- attempting retry 1 in 1 second...\n'
         'Download failed -- attempting retry 2 in 2 seconds...\n'
         'Download failed -- attempting retry 3 in 4 seconds...\n'
-        'Download failed -- attempting retry 4 in 8 seconds...\n'
+        'Download failed -- attempting retry 4 in 8 seconds...\n',
       );
     });
     expect(testLogger.errorText, isEmpty);
@@ -72,7 +72,7 @@
         'Download failed -- attempting retry 1 in 1 second...\n'
         'Download failed -- attempting retry 2 in 2 seconds...\n'
         'Download failed -- attempting retry 3 in 4 seconds...\n'
-        'Download failed -- attempting retry 4 in 8 seconds...\n'
+        'Download failed -- attempting retry 4 in 8 seconds...\n',
       );
     });
     expect(testLogger.errorText, isEmpty);
diff --git a/packages/flutter_tools/test/base/os_test.dart b/packages/flutter_tools/test/base/os_test.dart
index 21752a4..dcacba9 100644
--- a/packages/flutter_tools/test/base/os_test.dart
+++ b/packages/flutter_tools/test/base/os_test.dart
@@ -32,7 +32,7 @@
       expect(utils.which(kExecutable), isNull);
     }, overrides: <Type, Generator>{
       ProcessManager: () => mockProcessManager,
-      Platform: () => FakePlatform(operatingSystem: 'linux')
+      Platform: () => FakePlatform(operatingSystem: 'linux'),
     });
 
     testUsingContext('returns exactly one result', () async {
@@ -42,7 +42,7 @@
       expect(utils.which(kExecutable).path, kPath1);
     }, overrides: <Type, Generator>{
       ProcessManager: () => mockProcessManager,
-      Platform: () => FakePlatform(operatingSystem: 'linux')
+      Platform: () => FakePlatform(operatingSystem: 'linux'),
     });
 
     testUsingContext('returns all results for whichAll', () async {
@@ -55,7 +55,7 @@
       expect(result[1].path, kPath2);
     }, overrides: <Type, Generator>{
       ProcessManager: () => mockProcessManager,
-      Platform: () => FakePlatform(operatingSystem: 'linux')
+      Platform: () => FakePlatform(operatingSystem: 'linux'),
     });
   });
 
@@ -68,7 +68,7 @@
       expect(utils.which(kExecutable), isNull);
     }, overrides: <Type, Generator>{
       ProcessManager: () => mockProcessManager,
-      Platform: () => FakePlatform(operatingSystem: 'windows')
+      Platform: () => FakePlatform(operatingSystem: 'windows'),
     });
 
     testUsingContext('returns exactly one result', () async {
@@ -78,7 +78,7 @@
       expect(utils.which(kExecutable).path, kPath1);
     }, overrides: <Type, Generator>{
       ProcessManager: () => mockProcessManager,
-      Platform: () => FakePlatform(operatingSystem: 'windows')
+      Platform: () => FakePlatform(operatingSystem: 'windows'),
     });
 
     testUsingContext('returns all results for whichAll', () async {
@@ -91,7 +91,7 @@
       expect(result[1].path, kPath2);
     }, overrides: <Type, Generator>{
       ProcessManager: () => mockProcessManager,
-      Platform: () => FakePlatform(operatingSystem: 'windows')
+      Platform: () => FakePlatform(operatingSystem: 'windows'),
     });
   });
 }
diff --git a/packages/flutter_tools/test/base/process_test.dart b/packages/flutter_tools/test/base/process_test.dart
index 2139a54..c4be308 100644
--- a/packages/flutter_tools/test/base/process_test.dart
+++ b/packages/flutter_tools/test/base/process_test.dart
@@ -87,7 +87,7 @@
       Logger: () => mockLogger,
       ProcessManager: () => mockProcessManager,
       OutputPreferences: () => OutputPreferences(wrapText: true, wrapColumn: 40),
-      Platform: () => FakePlatform.fromPlatform(const LocalPlatform())..stdoutSupportsAnsi = false
+      Platform: () => FakePlatform.fromPlatform(const LocalPlatform())..stdoutSupportsAnsi = false,
     });
   });
 }
diff --git a/packages/flutter_tools/test/build_runner/code_generating_kernel_compiler.dart b/packages/flutter_tools/test/build_runner/code_generating_kernel_compiler.dart
index 4dbd4d5..c5381a2 100644
--- a/packages/flutter_tools/test/build_runner/code_generating_kernel_compiler.dart
+++ b/packages/flutter_tools/test/build_runner/code_generating_kernel_compiler.dart
@@ -35,7 +35,7 @@
         linkPlatformKernelIn: anyNamed('linkPlatformKernelIn'),
         mainPath: anyNamed('mainPath'),
         targetProductVm: anyNamed('targetProductVm'),
-        trackWidgetCreation: anyNamed('trackWidgetCreation')
+        trackWidgetCreation: anyNamed('trackWidgetCreation'),
       )).thenAnswer((Invocation invocation) async {
         return CodeGenerationResult(fs.file('.packages'), fs.file('main.app.dill'));
       });
diff --git a/packages/flutter_tools/test/cache_test.dart b/packages/flutter_tools/test/cache_test.dart
index 41840a3..079b045 100644
--- a/packages/flutter_tools/test/cache_test.dart
+++ b/packages/flutter_tools/test/cache_test.dart
@@ -63,7 +63,7 @@
       expect(gradleWrapper.isUpToDateInner(), false);
     }, overrides: <Type, Generator>{
       Cache: ()=> mockCache,
-      FileSystem: () => fs
+      FileSystem: () => fs,
     });
 
     testUsingContext('Gradle wrapper should be up to date, only if all cached artifact are available', () {
@@ -78,7 +78,7 @@
       expect(gradleWrapper.isUpToDateInner(), true);
     }, overrides: <Type, Generator>{
       Cache: ()=> mockCache,
-      FileSystem: () => fs
+      FileSystem: () => fs,
     });
 
     test('should not be up to date, if some cached artifact is not', () {
diff --git a/packages/flutter_tools/test/commands/analyze_continuously_test.dart b/packages/flutter_tools/test/commands/analyze_continuously_test.dart
index d03cf66..7fa979a 100644
--- a/packages/flutter_tools/test/commands/analyze_continuously_test.dart
+++ b/packages/flutter_tools/test/commands/analyze_continuously_test.dart
@@ -45,7 +45,7 @@
 
       expect(errorCount, 0);
     }, overrides: <Type, Generator>{
-      OperatingSystemUtils: () => os
+      OperatingSystemUtils: () => os,
     });
   });
 
@@ -67,7 +67,7 @@
 
     expect(errorCount, greaterThan(0));
   }, overrides: <Type, Generator>{
-    OperatingSystemUtils: () => os
+    OperatingSystemUtils: () => os,
   });
 
   testUsingContext('Returns no errors when source is error-free', () async {
@@ -84,7 +84,7 @@
     await onDone;
     expect(errorCount, 0);
   }, overrides: <Type, Generator>{
-    OperatingSystemUtils: () => os
+    OperatingSystemUtils: () => os,
   });
 }
 
diff --git a/packages/flutter_tools/test/commands/create_test.dart b/packages/flutter_tools/test/commands/create_test.dart
index 21fa293..8bf1604 100644
--- a/packages/flutter_tools/test/commands/create_test.dart
+++ b/packages/flutter_tools/test/commands/create_test.dart
@@ -86,7 +86,7 @@
 
   testUsingContext('creates a module project correctly', () async {
     await _createAndAnalyzeProject(projectDir, <String>[
-      '--template=module'
+      '--template=module',
     ], <String>[
       '.android/app/',
       '.gitignore',
@@ -341,7 +341,7 @@
 
   testUsingContext('module project with pub', () async {
     return _createProject(projectDir, <String>[
-      '--template=module'
+      '--template=module',
     ], <String>[
       '.android/build.gradle',
       '.android/Flutter/build.gradle',
@@ -531,11 +531,11 @@
     FlutterProject project = await FlutterProject.fromDirectory(fs.directory(tmpProjectDir));
     expect(
         project.ios.productBundleIdentifier,
-        'com.example.helloFlutter'
+        'com.example.helloFlutter',
     );
     expect(
         project.android.applicationId,
-        'com.example.hello_flutter'
+        'com.example.hello_flutter',
     );
 
     tmpProjectDir = fs.path.join(tempDir.path, 'test_abc');
@@ -543,11 +543,11 @@
     project = await FlutterProject.fromDirectory(fs.directory(tmpProjectDir));
     expect(
         project.ios.productBundleIdentifier,
-        'abc.1.testAbc'
+        'abc.1.testAbc',
     );
     expect(
         project.android.applicationId,
-        'abc.u1.test_abc'
+        'abc.u1.test_abc',
     );
 
     tmpProjectDir = fs.path.join(tempDir.path, 'flutter_project');
@@ -555,11 +555,11 @@
     project = await FlutterProject.fromDirectory(fs.directory(tmpProjectDir));
     expect(
         project.ios.productBundleIdentifier,
-        'flutterProject.untitled'
+        'flutterProject.untitled',
     );
     expect(
         project.android.applicationId,
-        'flutter_project.untitled'
+        'flutter_project.untitled',
     );
   }, overrides: <Type, Generator>{
     FlutterVersion: () => mockFlutterVersion,
@@ -1061,7 +1061,7 @@
     void onData(List<int> event), {
     Function onError,
     void onDone(),
-    bool cancelOnError
+    bool cancelOnError,
   }) {
     return Stream<List<int>>.fromIterable(<List<int>>[result.codeUnits])
       .listen(onData, onError: onError, onDone: onDone, cancelOnError: cancelOnError);
diff --git a/packages/flutter_tools/test/commands/daemon_test.dart b/packages/flutter_tools/test/commands/daemon_test.dart
index 4a1c26b..043de1e 100644
--- a/packages/flutter_tools/test/commands/daemon_test.dart
+++ b/packages/flutter_tools/test/commands/daemon_test.dart
@@ -37,7 +37,7 @@
       daemon = Daemon(
         commands.stream,
         responses.add,
-        notifyingLogger: notifyingLogger
+        notifyingLogger: notifyingLogger,
       );
       commands.add(<String, dynamic>{'id': 0, 'method': 'daemon.version'});
       final Map<String, dynamic> response = await responses.stream.firstWhere(_notEvent);
@@ -101,7 +101,7 @@
       daemon = Daemon(
         commands.stream,
         responses.add,
-        notifyingLogger: notifyingLogger
+        notifyingLogger: notifyingLogger,
       );
       commands.add(<String, dynamic>{'id': 0, 'method': 'daemon.shutdown'});
       return daemon.onExit.then<void>((int code) async {
@@ -148,8 +148,8 @@
         'id': 0,
         'method': 'app.callServiceExtension',
         'params': <String, String> {
-          'methodName': 'ext.flutter.debugPaint'
-        }
+          'methodName': 'ext.flutter.debugPaint',
+        },
       });
       final Map<String, dynamic> response = await responses.stream.firstWhere(_notEvent);
       expect(response['id'], 0);
@@ -185,7 +185,7 @@
       daemon = Daemon(
         commands.stream,
         responses.add,
-        notifyingLogger: notifyingLogger
+        notifyingLogger: notifyingLogger,
       );
       commands.add(<String, dynamic>{'id': 0, 'method': 'device.getDevices'});
       final Map<String, dynamic> response = await responses.stream.firstWhere(_notEvent);
@@ -222,7 +222,7 @@
       daemon = Daemon(
           commands.stream,
           responses.add,
-          notifyingLogger: notifyingLogger
+          notifyingLogger: notifyingLogger,
       );
 
       final MockPollingDeviceDiscovery discoverer = MockPollingDeviceDiscovery();
@@ -255,7 +255,7 @@
         commands.stream,
         responses.add,
         daemonCommand: command,
-        notifyingLogger: notifyingLogger
+        notifyingLogger: notifyingLogger,
       );
 
       commands.add(<String, dynamic>{ 'id': 0, 'method': 'emulator.launch' });
@@ -272,7 +272,7 @@
       daemon = Daemon(
         commands.stream,
         responses.add,
-        notifyingLogger: notifyingLogger
+        notifyingLogger: notifyingLogger,
       );
       commands.add(<String, dynamic>{'id': 0, 'method': 'emulator.getEmulators'});
       final Map<String, dynamic> response = await responses.stream.firstWhere(_notEvent);
@@ -287,15 +287,15 @@
     test('OperationResult', () {
       expect(
         jsonEncodeObject(OperationResult.ok),
-        '{"code":0,"message":""}'
+        '{"code":0,"message":""}',
       );
       expect(
         jsonEncodeObject(OperationResult(1, 'foo')),
-        '{"code":1,"message":"foo"}'
+        '{"code":1,"message":"foo"}',
       );
       expect(
         jsonEncodeObject(OperationResult(0, 'foo', hintMessage: 'my hint', hintId: 'myId')),
-        '{"code":0,"message":"foo","hintMessage":"my hint","hintId":"myId"}'
+        '{"code":0,"message":"foo","hintMessage":"my hint","hintId":"myId"}',
       );
     });
   });
diff --git a/packages/flutter_tools/test/commands/doctor_test.dart b/packages/flutter_tools/test/commands/doctor_test.dart
index 32a6e5c..dfa032e 100644
--- a/packages/flutter_tools/test/commands/doctor_test.dart
+++ b/packages/flutter_tools/test/commands/doctor_test.dart
@@ -24,7 +24,7 @@
 
 final Generator _kNoColorOutputPlatform = () => FakePlatform.fromPlatform(const LocalPlatform())..stdoutSupportsAnsi = false;
 final Map<Type, Generator> noColorTerminalOverride = <Type, Generator>{
-  Platform: _kNoColorOutputPlatform
+  Platform: _kNoColorOutputPlatform,
 };
 
 void main() {
@@ -144,7 +144,7 @@
       Platform: () => FakePlatform()
         ..environment = <String, String>{
           'HTTP_PROXY': 'fakeproxy.local',
-          'NO_PROXY': 'localhost,127.0.0.1'
+          'NO_PROXY': 'localhost,127.0.0.1',
         },
     });
 
@@ -159,7 +159,7 @@
       Platform: () => FakePlatform()
         ..environment = <String, String>{
           'http_proxy': 'fakeproxy.local',
-          'no_proxy': 'localhost,127.0.0.1'
+          'no_proxy': 'localhost,127.0.0.1',
         },
     });
 
@@ -174,7 +174,7 @@
       Platform: () => FakePlatform()
         ..environment = <String, String>{
           'HTTP_PROXY': 'fakeproxy.local',
-          'NO_PROXY': '127.0.0.1'
+          'NO_PROXY': '127.0.0.1',
         },
     });
 
@@ -189,7 +189,7 @@
       Platform: () => FakePlatform()
         ..environment = <String, String>{
           'HTTP_PROXY': 'fakeproxy.local',
-          'NO_PROXY': 'localhost'
+          'NO_PROXY': 'localhost',
         },
     });
   });
@@ -635,7 +635,7 @@
     return <DoctorValidator>[
       PassingValidator('Passing Validator'),
       PassingValidator('Another Passing Validator'),
-      PassingValidator('Providing validators is fun')
+      PassingValidator('Providing validators is fun'),
     ];
   }
 
@@ -699,11 +699,11 @@
       _validators = <DoctorValidator>[];
       _validators.add(GroupedValidator(<DoctorValidator>[
         PassingGroupedValidator('Category 1'),
-        PassingGroupedValidator('Category 1')
+        PassingGroupedValidator('Category 1'),
       ]));
       _validators.add(GroupedValidator(<DoctorValidator>[
         PassingGroupedValidator('Category 2'),
-        MissingGroupedValidator('Category 2')
+        MissingGroupedValidator('Category 2'),
       ]));
     }
     return _validators;
diff --git a/packages/flutter_tools/test/commands/format_test.dart b/packages/flutter_tools/test/commands/format_test.dart
index f3878cf..d20c73d 100644
--- a/packages/flutter_tools/test/commands/format_test.dart
+++ b/packages/flutter_tools/test/commands/format_test.dart
@@ -68,7 +68,7 @@
       final CommandRunner<void> runner = createTestCommandRunner(command);
 
       expect(runner.run(<String>[
-        'format', '--dry-run', '--set-exit-if-changed', srcFile.path
+        'format', '--dry-run', '--set-exit-if-changed', srcFile.path,
       ]), throwsException);
 
       final String shouldNotFormatted = srcFile.readAsStringSync();
diff --git a/packages/flutter_tools/test/commands/packages_test.dart b/packages/flutter_tools/test/commands/packages_test.dart
index d7a4718..2d37e95 100644
--- a/packages/flutter_tools/test/commands/packages_test.dart
+++ b/packages/flutter_tools/test/commands/packages_test.dart
@@ -82,7 +82,7 @@
       expect(
         fs.file(fs.path.join(projectPath, relPath)).readAsStringSync(),
         contains(substring),
-        reason: '$projectPath/$relPath has unexpected content'
+        reason: '$projectPath/$relPath has unexpected content',
       );
     }
 
diff --git a/packages/flutter_tools/test/crash_reporting_test.dart b/packages/flutter_tools/test/crash_reporting_test.dart
index cac269e..3d49ff2 100644
--- a/packages/flutter_tools/test/crash_reporting_test.dart
+++ b/packages/flutter_tools/test/crash_reporting_test.dart
@@ -70,12 +70,12 @@
           value: (dynamic value) {
             final List<String> pair = value;
             return pair[1];
-          }
+          },
         );
 
         return Response(
             'test-report-id',
-            200
+            200,
         );
       }));
 
diff --git a/packages/flutter_tools/test/dart/pub_get_test.dart b/packages/flutter_tools/test/dart/pub_get_test.dart
index f3552c2..eb09f26 100644
--- a/packages/flutter_tools/test/dart/pub_get_test.dart
+++ b/packages/flutter_tools/test/dart/pub_get_test.dart
@@ -40,7 +40,7 @@
       time.elapse(const Duration(milliseconds: 500));
       expect(testLogger.statusText,
         'Running "flutter packages get" in /...\n'
-        'pub get failed (69) -- attempting retry 1 in 1 second...\n'
+        'pub get failed (69) -- attempting retry 1 in 1 second...\n',
       );
       expect(processMock.lastPubEnvironment, contains('flutter_cli:flutter_tests'));
       expect(processMock.lastPubCache, isNull);
@@ -48,13 +48,13 @@
       expect(testLogger.statusText,
         'Running "flutter packages get" in /...\n'
         'pub get failed (69) -- attempting retry 1 in 1 second...\n'
-        'pub get failed (69) -- attempting retry 2 in 2 seconds...\n'
+        'pub get failed (69) -- attempting retry 2 in 2 seconds...\n',
       );
       time.elapse(const Duration(seconds: 1));
       expect(testLogger.statusText,
         'Running "flutter packages get" in /...\n'
         'pub get failed (69) -- attempting retry 1 in 1 second...\n'
-        'pub get failed (69) -- attempting retry 2 in 2 seconds...\n'
+        'pub get failed (69) -- attempting retry 2 in 2 seconds...\n',
       );
       time.elapse(const Duration(seconds: 100)); // from t=0 to t=100
       expect(testLogger.statusText,
@@ -65,7 +65,7 @@
         'pub get failed (69) -- attempting retry 4 in 8 seconds...\n' // at t=5
         'pub get failed (69) -- attempting retry 5 in 16 seconds...\n' // at t=13
         'pub get failed (69) -- attempting retry 6 in 32 seconds...\n' // at t=29
-        'pub get failed (69) -- attempting retry 7 in 64 seconds...\n' // at t=61
+        'pub get failed (69) -- attempting retry 7 in 64 seconds...\n', // at t=61
       );
       time.elapse(const Duration(seconds: 200)); // from t=0 to t=200
       expect(testLogger.statusText,
@@ -79,7 +79,7 @@
         'pub get failed (69) -- attempting retry 7 in 64 seconds...\n'
         'pub get failed (69) -- attempting retry 8 in 64 seconds...\n' // at t=39
         'pub get failed (69) -- attempting retry 9 in 64 seconds...\n' // at t=103
-        'pub get failed (69) -- attempting retry 10 in 64 seconds...\n' // at t=167
+        'pub get failed (69) -- attempting retry 10 in 64 seconds...\n', // at t=167
       );
     });
     expect(testLogger.errorText, isEmpty);
diff --git a/packages/flutter_tools/test/devfs_test.dart b/packages/flutter_tools/test/devfs_test.dart
index 16ccf40..db86a6b 100644
--- a/packages/flutter_tools/test/devfs_test.dart
+++ b/packages/flutter_tools/test/devfs_test.dart
@@ -432,7 +432,7 @@
         'writeFile test lib/foo.txt.dill build/app.dill',
       ]);
       expect(devFS.assetPathsToEvict, unorderedMatches(<String>[
-        'a.txt', 'b.txt'
+        'a.txt', 'b.txt',
       ]));
       devFS.assetPathsToEvict.clear();
       expect(report.syncedBytes, 22);
diff --git a/packages/flutter_tools/test/emulator_test.dart b/packages/flutter_tools/test/emulator_test.dart
index 71469fb..2fdef5b 100644
--- a/packages/flutter_tools/test/emulator_test.dart
+++ b/packages/flutter_tools/test/emulator_test.dart
@@ -53,7 +53,7 @@
       final List<Emulator> emulators = <Emulator>[
         emulator1,
         emulator2,
-        emulator3
+        emulator3,
       ];
       final TestEmulatorManager testEmulatorManager =
           TestEmulatorManager(emulators);
@@ -204,7 +204,7 @@
     bool includeParentEnvironment = true,
     bool runInShell = false,
     Encoding stdoutEncoding = systemEncoding,
-    Encoding stderrEncoding = systemEncoding
+    Encoding stderrEncoding = systemEncoding,
   }) {
     final String program = command[0];
     final List<String> args = command.sublist(1);
diff --git a/packages/flutter_tools/test/flutter_manifest_test.dart b/packages/flutter_tools/test/flutter_manifest_test.dart
index b4f4508..828bc6f 100644
--- a/packages/flutter_tools/test/flutter_manifest_test.dart
+++ b/packages/flutter_tools/test/flutter_manifest_test.dart
@@ -506,7 +506,7 @@
       },
           overrides: <Type, Generator>{
             FileSystem: () => filesystem,
-          }
+          },
       );
     }
 
@@ -517,13 +517,13 @@
     testUsingContextAndFs('Validate manifest on Posix FS',
         MemoryFileSystem(style: FileSystemStyle.posix), () {
           assertSchemaIsReadable();
-        }
+        },
     );
 
     testUsingContextAndFs('Validate manifest on Windows FS',
         MemoryFileSystem(style: FileSystemStyle.windows), () {
           assertSchemaIsReadable();
-        }
+        },
     );
 
   });
diff --git a/packages/flutter_tools/test/forbidden_imports_test.dart b/packages/flutter_tools/test/forbidden_imports_test.dart
index 4a6fa02..7b8168b 100644
--- a/packages/flutter_tools/test/forbidden_imports_test.dart
+++ b/packages/flutter_tools/test/forbidden_imports_test.dart
@@ -83,7 +83,7 @@
     final List<String> whitelistedPaths = <String>[
       fs.path.join(flutterTools, 'test', 'src', 'build_runner'),
       fs.path.join(flutterTools, 'lib', 'src', 'build_runner'),
-      fs.path.join(flutterTools, 'lib', 'executable.dart')
+      fs.path.join(flutterTools, 'lib', 'executable.dart'),
     ];
     bool _isNotWhitelisted(FileSystemEntity entity) => whitelistedPaths.every((String path) => !entity.path.contains(path));
 
diff --git a/packages/flutter_tools/test/fuchsia/fuchsa_device_test.dart b/packages/flutter_tools/test/fuchsia/fuchsa_device_test.dart
index 452fde7..7654d85 100644
--- a/packages/flutter_tools/test/fuchsia/fuchsa_device_test.dart
+++ b/packages/flutter_tools/test/fuchsia/fuchsa_device_test.dart
@@ -224,7 +224,7 @@
         fuchsiaDevice,
         expectedIsolateName,
         (Uri uri) async => vmService,
-        true // only poll once.
+        true, // only poll once.
       );
       when(fuchsiaDevice.servicePorts()).thenAnswer((Invocation invocation) async => <int>[1]);
       when(portForwarder.forward(1)).thenAnswer((Invocation invocation) async => 2);
diff --git a/packages/flutter_tools/test/hot_test.dart b/packages/flutter_tools/test/hot_test.dart
index c14b458..f681f42 100644
--- a/packages/flutter_tools/test/hot_test.dart
+++ b/packages/flutter_tools/test/hot_test.dart
@@ -54,7 +54,7 @@
         'success': false,
         'details': <String, dynamic>{
           'notices': <Map<String, dynamic>>[
-            <String, dynamic>{ 'message': false, }
+            <String, dynamic>{ 'message': false, },
           ],
         },
       }), false);
@@ -141,7 +141,7 @@
       when(mockDevice.supportsHotRestart).thenReturn(false);
       // Trigger hot restart.
       final List<FlutterDevice> devices = <FlutterDevice>[
-        FlutterDevice(mockDevice, generator: residentCompiler, trackWidgetCreation: false)..devFS = mockDevFs
+        FlutterDevice(mockDevice, generator: residentCompiler, trackWidgetCreation: false)..devFS = mockDevFs,
       ];
       final OperationResult result = await HotRunner(devices).restart(fullRestart: true);
       // Expect hot restart failed.
@@ -201,7 +201,7 @@
       when(mockDevice.supportsHotReload).thenReturn(true);
       when(mockDevice.supportsHotRestart).thenReturn(true);
       final List<FlutterDevice> devices = <FlutterDevice>[
-        FlutterDevice(mockDevice, generator: residentCompiler, trackWidgetCreation: false)
+        FlutterDevice(mockDevice, generator: residentCompiler, trackWidgetCreation: false),
       ];
       final OperationResult result = await HotRunner(devices).restart(fullRestart: true);
       expect(result.isOk, false);
@@ -218,7 +218,7 @@
       when(mockDevice.supportsHotRestart).thenReturn(true);
       // Trigger hot restart.
       final List<FlutterDevice> devices = <FlutterDevice>[
-        FlutterDevice(mockDevice, generator: residentCompiler, trackWidgetCreation: false)..devFS = mockDevFs
+        FlutterDevice(mockDevice, generator: residentCompiler, trackWidgetCreation: false)..devFS = mockDevFs,
       ];
       final OperationResult result = await HotRunner(devices).restart(fullRestart: true);
       // Expect hot restart successful.
@@ -245,7 +245,7 @@
         when(mockDevice.supportsHotRestart).thenReturn(true);
         when(mockDevice.supportsStopApp).thenReturn(false);
         final List<FlutterDevice> devices = <FlutterDevice>[
-          FlutterDevice(mockDevice, generator: residentCompiler, trackWidgetCreation: false)
+          FlutterDevice(mockDevice, generator: residentCompiler, trackWidgetCreation: false),
         ];
         await HotRunner(devices).cleanupAfterSignal();
         expect(shutdownTestingConfig.shutdownHookCalled, true);
@@ -260,7 +260,7 @@
         when(mockDevice.supportsHotRestart).thenReturn(true);
         when(mockDevice.supportsStopApp).thenReturn(false);
         final List<FlutterDevice> devices = <FlutterDevice>[
-          FlutterDevice(mockDevice, generator: residentCompiler, trackWidgetCreation: false)
+          FlutterDevice(mockDevice, generator: residentCompiler, trackWidgetCreation: false),
         ];
         await HotRunner(devices).preStop();
         expect(shutdownTestingConfig.shutdownHookCalled, true);
diff --git a/packages/flutter_tools/test/integration/flutter_run_test.dart b/packages/flutter_tools/test/integration/flutter_run_test.dart
index be1150c..55d9db3 100644
--- a/packages/flutter_tools/test/integration/flutter_run_test.dart
+++ b/packages/flutter_tools/test/integration/flutter_run_test.dart
@@ -39,7 +39,7 @@
       const ProcessManager _processManager = LocalProcessManager();
       final ProcessResult _proc = await _processManager.run(
         <String>[flutterBin, 'run', '-d', 'invalid-device-id'],
-        workingDirectory: tempDir.path
+        workingDirectory: tempDir.path,
       );
 
       expect(_proc.stdout, isNot(contains('flutter has exited unexpectedly')));
diff --git a/packages/flutter_tools/test/integration/test_data/hot_reload_project.dart b/packages/flutter_tools/test/integration/test_data/hot_reload_project.dart
index ef85ac8..68de1d4 100644
--- a/packages/flutter_tools/test/integration/test_data/hot_reload_project.dart
+++ b/packages/flutter_tools/test/integration/test_data/hot_reload_project.dart
@@ -77,7 +77,7 @@
   void uncommentHotReloadPrint() {
     final String newMainContents = main.replaceAll(
       '// printHotReloadWorked();',
-      'printHotReloadWorked();'
+      'printHotReloadWorked();',
     );
     writeFile(fs.path.join(dir.path, 'lib', 'main.dart'), newMainContents);
   }
diff --git a/packages/flutter_tools/test/integration/test_driver.dart b/packages/flutter_tools/test/integration/test_driver.dart
index dcb011d..a688cb4 100644
--- a/packages/flutter_tools/test/integration/test_driver.dart
+++ b/packages/flutter_tools/test/integration/test_driver.dart
@@ -502,7 +502,7 @@
     _debugPrint('Performing ${ pause ? "paused " : "" }${ fullRestart ? "hot restart" : "hot reload" }...');
     final dynamic hotReloadResponse = await _sendRequest(
       'app.restart',
-      <String, dynamic>{'appId': _currentRunningAppId, 'fullRestart': fullRestart, 'pause': pause}
+      <String, dynamic>{'appId': _currentRunningAppId, 'fullRestart': fullRestart, 'pause': pause},
     );
     _debugPrint('${ fullRestart ? "Hot restart" : "Hot reload" } complete.');
 
@@ -565,7 +565,7 @@
     final Map<String, dynamic> request = <String, dynamic>{
       'id': requestId,
       'method': method,
-      'params': params
+      'params': params,
     };
     final String jsonEncoded = json.encode(<Map<String, dynamic>>[request]);
     _debugPrint(jsonEncoded, topic: '=stdin=>');
@@ -606,7 +606,7 @@
         'test',
         '--machine',
         '-d',
-        'flutter-tester'
+        'flutter-tester',
     ], script: testFile, withDebugger: withDebugger, pauseOnExceptions: pauseOnExceptions, pidFile: pidFile, beforeStart: beforeStart);
   }
 
diff --git a/packages/flutter_tools/test/integration/test_utils.dart b/packages/flutter_tools/test/integration/test_utils.dart
index c312897..4af1c03 100644
--- a/packages/flutter_tools/test/integration/test_utils.dart
+++ b/packages/flutter_tools/test/integration/test_utils.dart
@@ -44,7 +44,7 @@
   final List<String> command = <String>[
     fs.path.join(getFlutterRoot(), 'bin', 'flutter'),
     'packages',
-    'get'
+    'get',
   ];
   final Process process = await processManager.start(command, workingDirectory: folder);
   final StringBuffer errorOutput = StringBuffer();
diff --git a/packages/flutter_tools/test/ios/cocoapods_test.dart b/packages/flutter_tools/test/ios/cocoapods_test.dart
index 78454d7..9bb1963 100644
--- a/packages/flutter_tools/test/ios/cocoapods_test.dart
+++ b/packages/flutter_tools/test/ios/cocoapods_test.dart
@@ -62,12 +62,12 @@
     cocoaPodsUnderTest = CocoaPods();
     pretendPodVersionIs('1.5.0');
     fs.file(fs.path.join(
-      Cache.flutterRoot, 'packages', 'flutter_tools', 'templates', 'cocoapods', 'Podfile-objc'
+      Cache.flutterRoot, 'packages', 'flutter_tools', 'templates', 'cocoapods', 'Podfile-objc',
     ))
         ..createSync(recursive: true)
         ..writeAsStringSync('Objective-C podfile template');
     fs.file(fs.path.join(
-      Cache.flutterRoot, 'packages', 'flutter_tools', 'templates', 'cocoapods', 'Podfile-swift'
+      Cache.flutterRoot, 'packages', 'flutter_tools', 'templates', 'cocoapods', 'Podfile-swift',
     ))
         ..createSync(recursive: true)
         ..writeAsStringSync('Swift podfile template');
diff --git a/packages/flutter_tools/test/ios/code_signing_test.dart b/packages/flutter_tools/test/ios/code_signing_test.dart
index 8c1fc5d..b205fde 100644
--- a/packages/flutter_tools/test/ios/code_signing_test.dart
+++ b/packages/flutter_tools/test/ios/code_signing_test.dart
@@ -108,7 +108,7 @@
         '''
 1) 86f7e437faa5a7fce15d1ddcb9eaeaea377667b8 "iPhone Developer: Profile 1 (1111AAAA11)"
     1 valid identities found''',
-        ''
+        '',
       ));
       when(mockProcessManager.runSync(
         <String>['security', 'find-certificate', '-c', '1111AAAA11', '-p'],
@@ -170,7 +170,7 @@
 2) da4b9237bacccdf19c0760cab7aec4a8359010b0 "iPhone Developer: Profile 2 (2222BBBB22)"
 3) 5bf1fd927dfb8679496a2e6cf00cbe50c1c87145 "iPhone Developer: Profile 3 (3333CCCC33)"
     3 valid identities found''',
-        ''
+        '',
       ));
       mockTerminalStdInStream =
           Stream<String>.fromFuture(Future<String>.value('3'));
@@ -209,11 +209,11 @@
 
       expect(
         testLogger.statusText,
-        contains('Please select a certificate for code signing [<bold>1</bold>|2|3|a]: 3')
+        contains('Please select a certificate for code signing [<bold>1</bold>|2|3|a]: 3'),
       );
       expect(
         testLogger.statusText,
-        contains('Signing iOS app for device deployment using developer identity: "iPhone Developer: Profile 3 (3333CCCC33)"')
+        contains('Signing iOS app for device deployment using developer identity: "iPhone Developer: Profile 3 (3333CCCC33)"'),
       );
       expect(testLogger.errorText, isEmpty);
       verify(mockOpenSslStdIn.write('This is a mock certificate'));
@@ -245,7 +245,7 @@
 2) da4b9237bacccdf19c0760cab7aec4a8359010b0 "iPhone Developer: Profile 2 (2222BBBB22)"
 3) 5bf1fd927dfb8679496a2e6cf00cbe50c1c87145 "iPhone Developer: Profile 3 (3333CCCC33)"
     3 valid identities found''',
-          ''
+          '',
       ));
       mockTerminalStdInStream =
         Stream<String>.fromFuture(Future<String>.error(Exception('Cannot read from StdIn')));
@@ -314,7 +314,7 @@
 2) da4b9237bacccdf19c0760cab7aec4a8359010b0 "iPhone Developer: Profile 2 (2222BBBB22)"
 3) 5bf1fd927dfb8679496a2e6cf00cbe50c1c87145 "iPhone Developer: Profile 3 (3333CCCC33)"
     3 valid identities found''',
-        ''
+        '',
       ));
       when(mockProcessManager.runSync(
         <String>['security', 'find-certificate', '-c', '3333CCCC33', '-p'],
@@ -352,11 +352,11 @@
 
       expect(
         testLogger.statusText,
-        contains('Found saved certificate choice "iPhone Developer: Profile 3 (3333CCCC33)". To clear, use "flutter config"')
+        contains('Found saved certificate choice "iPhone Developer: Profile 3 (3333CCCC33)". To clear, use "flutter config"'),
       );
       expect(
         testLogger.statusText,
-        contains('Signing iOS app for device deployment using developer identity: "iPhone Developer: Profile 3 (3333CCCC33)"')
+        contains('Signing iOS app for device deployment using developer identity: "iPhone Developer: Profile 3 (3333CCCC33)"'),
       );
       expect(testLogger.errorText, isEmpty);
       verify(mockOpenSslStdIn.write('This is a mock certificate'));
@@ -385,7 +385,7 @@
 2) da4b9237bacccdf19c0760cab7aec4a8359010b0 "iPhone Developer: Profile 2 (2222BBBB22)"
 3) 5bf1fd927dfb8679496a2e6cf00cbe50c1c87145 "iPhone Developer: Profile 3 (3333CCCC33)"
     3 valid identities found''',
-        ''
+        '',
       ));
       mockTerminalStdInStream =
           Stream<String>.fromFuture(Future<String>.value('3'));
@@ -426,11 +426,11 @@
 
       expect(
         testLogger.errorText,
-        contains('Saved signing certificate "iPhone Developer: Invalid Profile" is not a valid development certificate')
+        contains('Saved signing certificate "iPhone Developer: Invalid Profile" is not a valid development certificate'),
       );
       expect(
         testLogger.statusText,
-        contains('Certificate choice "iPhone Developer: Profile 3 (3333CCCC33)"')
+        contains('Certificate choice "iPhone Developer: Profile 3 (3333CCCC33)"'),
       );
       expect(signingConfigs, <String, String> {'DEVELOPMENT_TEAM':'4444DDDD44'});
       verify(config.setValue('ios-signing-cert', 'iPhone Developer: Profile 3 (3333CCCC33)'));
diff --git a/packages/flutter_tools/test/ios/ios_workflow_test.dart b/packages/flutter_tools/test/ios/ios_workflow_test.dart
index 179799d..4692656 100644
--- a/packages/flutter_tools/test/ios/ios_workflow_test.dart
+++ b/packages/flutter_tools/test/ios/ios_workflow_test.dart
@@ -386,7 +386,7 @@
 
 class CocoaPodsTestTarget extends CocoaPodsValidator {
   CocoaPodsTestTarget({
-    this.hasHomebrew = true
+    this.hasHomebrew = true,
   });
 
   @override
diff --git a/packages/flutter_tools/test/ios/mac_test.dart b/packages/flutter_tools/test/ios/mac_test.dart
index 83fd861..7f232e8 100644
--- a/packages/flutter_tools/test/ios/mac_test.dart
+++ b/packages/flutter_tools/test/ios/mac_test.dart
@@ -153,7 +153,7 @@
         // Let `idevicescreenshot` fail with exit code 1.
         when(mockProcessManager.run(<String>['idevicescreenshot', outputPath],
             environment: null,
-            workingDirectory: null
+            workingDirectory: null,
         )).thenAnswer((_) => Future<ProcessResult>.value(ProcessResult(4, 1, '', '')));
 
         expect(() async => await iMobileDevice.takeScreenshot(mockOutputFile), throwsA(anything));
@@ -170,7 +170,7 @@
         await iMobileDevice.takeScreenshot(mockOutputFile);
         verify(mockProcessManager.run(<String>['idevicescreenshot', outputPath],
             environment: null,
-            workingDirectory: null
+            workingDirectory: null,
         ));
       }, overrides: <Type, Generator>{
         ProcessManager: () => mockProcessManager,
@@ -442,7 +442,7 @@
     const List<String> flutterAssetPbxProjLines = <String>[
       '/* flutter_assets */',
       '/* App.framework',
-      'another line'
+      'another line',
     ];
 
     const List<String> appFlxPbxProjLines = <String>[
diff --git a/packages/flutter_tools/test/ios/simulators_test.dart b/packages/flutter_tools/test/ios/simulators_test.dart
index dcadc72..ba2d8be 100644
--- a/packages/flutter_tools/test/ios/simulators_test.dart
+++ b/packages/flutter_tools/test/ios/simulators_test.dart
@@ -195,7 +195,7 @@
         when(mockXcode.minorVersion).thenReturn(1);
         expect(deviceUnderTest.supportsScreenshot, false);
       },
-      overrides: <Type, Generator>{Xcode: () => mockXcode}
+      overrides: <Type, Generator>{Xcode: () => mockXcode},
     );
 
     testUsingContext(
@@ -217,7 +217,7 @@
               fs.path.join('some', 'path', 'to', 'screenshot.png'),
           ],
           environment: null,
-          workingDirectory: null
+          workingDirectory: null,
         ));
       },
       overrides: <Type, Generator>{
@@ -225,7 +225,7 @@
         // Test a real one. Screenshot doesn't require instance states.
         SimControl: () => SimControl(),
         Xcode: () => mockXcode,
-      }
+      },
     );
   });
 
diff --git a/packages/flutter_tools/test/ios/xcode_backend_test.dart b/packages/flutter_tools/test/ios/xcode_backend_test.dart
index 26d0c63..4d4e958 100644
--- a/packages/flutter_tools/test/ios/xcode_backend_test.dart
+++ b/packages/flutter_tools/test/ios/xcode_backend_test.dart
@@ -32,7 +32,7 @@
   'SOURCE_ROOT': '../../examples/hello_world',
   'FLUTTER_ROOT': '../..',
   'LOCAL_ENGINE': '/engine/src/out/ios_debug_unopt',
-  'CONFIGURATION': 'Release'
+  'CONFIGURATION': 'Release',
 };
 
 // Can't use a debug build with a profile engine.
diff --git a/packages/flutter_tools/test/ios/xcodeproj_test.dart b/packages/flutter_tools/test/ios/xcodeproj_test.dart
index 2769cdc..ed4fa5e 100644
--- a/packages/flutter_tools/test/ios/xcodeproj_test.dart
+++ b/packages/flutter_tools/test/ios/xcodeproj_test.dart
@@ -110,7 +110,7 @@
       fs.file(xcodebuild).deleteSync();
       expect(xcodeProjectInterpreter.isInstalled, isFalse);
     }, overrides: <Type, Generator>{
-      Platform: () => fakePlatform('notMacOS')
+      Platform: () => fakePlatform('notMacOS'),
     });
 
     testUsingOsxContext('isInstalled is false when xcodebuild does not exist', () {
diff --git a/packages/flutter_tools/test/linux/linux_workflow_test.dart b/packages/flutter_tools/test/linux/linux_workflow_test.dart
index 8961a5c..2cd86f1 100644
--- a/packages/flutter_tools/test/linux/linux_workflow_test.dart
+++ b/packages/flutter_tools/test/linux/linux_workflow_test.dart
@@ -35,7 +35,7 @@
       expect(linuxWorkflow.canLaunchDevices, true);
       expect(linuxWorkflow.canListDevices, true);
     }, overrides: <Type, Generator>{
-      Platform: () => linuxWithFde
+      Platform: () => linuxWithFde,
     });
   });
 }
diff --git a/packages/flutter_tools/test/runner/flutter_command_test.dart b/packages/flutter_tools/test/runner/flutter_command_test.dart
index 3b14447..f98371a 100644
--- a/packages/flutter_tools/test/runner/flutter_command_test.dart
+++ b/packages/flutter_tools/test/runner/flutter_command_test.dart
@@ -60,7 +60,7 @@
         verify(usage.sendTiming(
                 captureAny, captureAny, captureAny,
                 label: captureAnyNamed('label'))).captured,
-        <dynamic>['flutter', 'dummy', const Duration(milliseconds: 1000), null]
+        <dynamic>['flutter', 'dummy', const Duration(milliseconds: 1000), null],
       );
     },
     overrides: <Type, Generator>{
@@ -93,7 +93,7 @@
         ExitStatus.success,
         // nulls should be cleaned up.
         timingLabelParts: <String> ['blah1', 'blah2', null, 'blah3'],
-        endTimeOverride: DateTime.fromMillisecondsSinceEpoch(1500)
+        endTimeOverride: DateTime.fromMillisecondsSinceEpoch(1500),
       );
 
       final DummyFlutterCommand flutterCommand = DummyFlutterCommand(
@@ -144,8 +144,8 @@
             'flutter',
             'dummy',
             const Duration(milliseconds: 1000),
-            'fail'
-          ]
+            'fail',
+          ],
         );
       }
     },
diff --git a/packages/flutter_tools/test/src/mocks.dart b/packages/flutter_tools/test/src/mocks.dart
index 0150d4c..b440e3f 100644
--- a/packages/flutter_tools/test/src/mocks.dart
+++ b/packages/flutter_tools/test/src/mocks.dart
@@ -31,7 +31,7 @@
       id: 'io.flutter.android.mock',
       file: fs.file('/mock/path/to/android/SkyShell.apk'),
       versionCode: 1,
-      launchActivity: 'io.flutter.android.mock.MockActivity'
+      launchActivity: 'io.flutter.android.mock.MockActivity',
     ),
     iOS: BuildableIOSApp(MockIosProject())
   );
@@ -488,7 +488,7 @@
     List<String> typeDefinitions,
     String libraryUri,
     String klass,
-    bool isStatic
+    bool isStatic,
   ) async {
     return null;
   }
diff --git a/packages/flutter_tools/test/tester/flutter_tester_test.dart b/packages/flutter_tools/test/tester/flutter_tester_test.dart
index 5b7aa26..a78f70f 100644
--- a/packages/flutter_tools/test/tester/flutter_tester_test.dart
+++ b/packages/flutter_tools/test/tester/flutter_tester_test.dart
@@ -161,7 +161,7 @@
 Observatory listening on $observatoryUri
 Hello!
 '''
-              .codeUnits
+              .codeUnits,
         ]));
 
         when(mockKernelCompiler.compile(
