enable lints prefer_spread_collections and prefer_inlined_adds (#35189)

diff --git a/analysis_options.yaml b/analysis_options.yaml
index 86371c8..84a7d94 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -33,11 +33,11 @@
     # Please see https://github.com/flutter/flutter/pull/24528 for details.
     sdk_version_async_exported_from_core: ignore
   exclude:
-    - 'bin/cache/**'
+    - "bin/cache/**"
     # the following two are relative to the stocks example and the flutter package respectively
     # see https://github.com/dart-lang/sdk/issues/28463
-    - 'lib/i18n/stock_messages_*.dart'
-    - 'lib/src/http/**'
+    - "lib/i18n/stock_messages_*.dart"
+    - "lib/src/http/**"
 
 linter:
   rules:
@@ -143,7 +143,7 @@
     # - prefer_if_elements_to_conditional_expressions # not yet tested
     # - prefer_if_null_operators # not yet tested
     - prefer_initializing_formals
-    # - prefer_inlined_adds # not yet tested
+    - prefer_inlined_adds
     # - prefer_int_literals # not yet tested
     # - prefer_interpolation_to_compose_strings # not yet tested
     - prefer_is_empty
@@ -152,7 +152,7 @@
     # - prefer_mixin # https://github.com/dart-lang/language/issues/32
     # - prefer_null_aware_operators # disable until NNBD, see https://github.com/flutter/flutter/pull/32711#issuecomment-492930932
     - prefer_single_quotes
-    # - prefer_spread_collections # not yet tested
+    - prefer_spread_collections
     - prefer_typing_uninitialized_variables
     - prefer_void_to_null
     # - provide_deprecation_message # not yet tested
diff --git a/dev/benchmarks/macrobenchmarks/lib/src/cubic_bezier.dart b/dev/benchmarks/macrobenchmarks/lib/src/cubic_bezier.dart
index 8237d7e..37e88ff 100644
--- a/dev/benchmarks/macrobenchmarks/lib/src/cubic_bezier.dart
+++ b/dev/benchmarks/macrobenchmarks/lib/src/cubic_bezier.dart
@@ -117,11 +117,12 @@
   AnimationController controller;
   CurvedAnimation curve;
   bool isPlaying = false;
-  List<List<Point>> pointList = <List<Point>>[]
-    ..add(<Point>[])
-    ..add(<Point>[])
-    ..add(<Point>[])
-    ..add(<Point>[]);
+  List<List<Point>> pointList = <List<Point>>[
+    <Point>[],
+    <Point>[],
+    <Point>[],
+    <Point>[],
+  ];
   bool isReversed = false;
 
   List<PathDetail> _playForward() {
diff --git a/dev/bots/analyze-sample-code.dart b/dev/bots/analyze-sample-code.dart
index f26fc54..e07905f 100644
--- a/dev/bots/analyze-sample-code.dart
+++ b/dev/bots/analyze-sample-code.dart
@@ -286,13 +286,14 @@
           '--snapshot=$_snippetsSnapshotPath',
           '--snapshot-kind=app-jit',
           path.canonicalize(_snippetsExecutable),
-        ]..addAll(args),
+          ...args,
+        ],
         workingDirectory: workingDirectory,
       );
     } else {
       return Process.runSync(
         _dartExecutable,
-        <String>[path.canonicalize(_snippetsSnapshotPath)]..addAll(args),
+        <String>[path.canonicalize(_snippetsSnapshotPath), ...args],
         workingDirectory: workingDirectory,
       );
     }
@@ -311,7 +312,8 @@
     final List<String> args = <String>[
       '--output=${outputFile.absolute.path}',
       '--input=${inputFile.absolute.path}',
-    ]..addAll(snippet.args);
+      ...snippet.args,
+    ];
     print('Generating snippet for ${snippet.start?.filename}:${snippet.start?.line}');
     final ProcessResult process = _runSnippetsScript(args);
     if (process.exitCode != 0) {
@@ -854,9 +856,11 @@
         ),
       );
     }
-    return Section(<Line>[Line(prefix)]
-      ..addAll(codeLines)
-      ..add(Line(postfix)));
+    return Section(<Line>[
+      Line(prefix),
+      ...codeLines,
+      Line(postfix),
+    ]);
   }
   Line get start => code.firstWhere((Line line) => line.filename != null);
   final List<Line> code;
@@ -868,8 +872,8 @@
 /// analyzed.
 class Snippet {
   Snippet({this.start, List<String> input, List<String> args, this.serial}) {
-    this.input = <String>[]..addAll(input);
-    this.args = <String>[]..addAll(args);
+    this.input = input.toList();
+    this.args = args.toList();
   }
   final Line start;
   final int serial;
diff --git a/dev/bots/analyze.dart b/dev/bots/analyze.dart
index ffa96e2..4397e65 100644
--- a/dev/bots/analyze.dart
+++ b/dev/bots/analyze.dart
@@ -260,7 +260,9 @@
 Future<void> _runFlutterAnalyze(String workingDirectory, {
   List<String> options = const <String>[],
 }) {
-  return runCommand(flutter, <String>['analyze', '--dartdocs']..addAll(options),
+  return runCommand(
+    flutter,
+    <String>['analyze', '--dartdocs', ...options],
     workingDirectory: workingDirectory,
   );
 }
@@ -456,7 +458,10 @@
     final List<T> result = _deepSearch<T>(
       map,
       key,
-      (seen == null ? <T>{start} : Set<T>.from(seen))..add(key),
+      <T>{
+        if (seen == null) start else ...seen,
+        key,
+      },
     );
     if (result != null) {
       result.insert(0, start);
diff --git a/dev/bots/prepare_package.dart b/dev/bots/prepare_package.dart
index cd49939..d36eaf2 100644
--- a/dev/bots/prepare_package.dart
+++ b/dev/bots/prepare_package.dart
@@ -381,14 +381,14 @@
 
   Future<String> _runFlutter(List<String> args, {Directory workingDirectory}) {
     return _processRunner.runProcess(
-      <String>[_flutter]..addAll(args),
+      <String>[_flutter, ...args],
       workingDirectory: workingDirectory ?? flutterRoot,
     );
   }
 
   Future<String> _runGit(List<String> args, {Directory workingDirectory}) {
     return _processRunner.runProcess(
-      <String>['git']..addAll(args),
+      <String>['git', ...args],
       workingDirectory: workingDirectory ?? flutterRoot,
     );
   }
@@ -574,14 +574,14 @@
   }) async {
     if (platform.isWindows) {
       return _processRunner.runProcess(
-        <String>['python', path.join(platform.environment['DEPOT_TOOLS'], 'gsutil.py'), '--']..addAll(args),
+        <String>['python', path.join(platform.environment['DEPOT_TOOLS'], 'gsutil.py'), '--', ...args],
         workingDirectory: workingDirectory,
         failOk: failOk,
       );
     }
 
     return _processRunner.runProcess(
-      <String>['gsutil.py', '--']..addAll(args),
+      <String>['gsutil.py', '--', ...args],
       workingDirectory: workingDirectory,
       failOk: failOk,
     );
diff --git a/dev/bots/pubspec.yaml b/dev/bots/pubspec.yaml
index 21dacf8..865e3ff 100644
--- a/dev/bots/pubspec.yaml
+++ b/dev/bots/pubspec.yaml
@@ -3,7 +3,7 @@
 
 environment:
   # The pub client defaults to an <2.0.0 sdk constraint which we need to explicitly overwrite.
-  sdk: ">=2.2.0 <3.0.0"
+  sdk: ">=2.2.2 <3.0.0"
 
 dependencies:
   path: 1.6.2
diff --git a/dev/bots/test.dart b/dev/bots/test.dart
index 8efc6ca..e164800 100644
--- a/dev/bots/test.dart
+++ b/dev/bots/test.dart
@@ -220,7 +220,7 @@
     final List<String> testGroup = tests[i];
     await runCommand(
       dart,
-      <String>[path.join('tool', 'tool_coverage.dart'), '--']..addAll(testGroup),
+      <String>[path.join('tool', 'tool_coverage.dart'), '--', ...testGroup],
       workingDirectory: toolRoot,
       environment: <String, String>{
         'FLUTTER_ROOT': flutterRoot,
@@ -791,7 +791,7 @@
   Map<String, String> environment,
   List<String> tests = const <String>[],
 }) async {
-  final List<String> args = <String>['test']..addAll(options);
+  final List<String> args = <String>['test', ...options];
   if (flutterTestArgs != null && flutterTestArgs.isNotEmpty)
     args.addAll(flutterTestArgs);
 
diff --git a/dev/bots/test/fake_process_manager.dart b/dev/bots/test/fake_process_manager.dart
index 6a4136c..29f3cda 100644
--- a/dev/bots/test/fake_process_manager.dart
+++ b/dev/bots/test/fake_process_manager.dart
@@ -35,8 +35,7 @@
   set fakeResults(Map<String, List<ProcessResult>> value) {
     _fakeResults = <String, List<ProcessResult>>{};
     for (String key in value.keys) {
-      _fakeResults[key] = <ProcessResult>[]
-        ..addAll(value[key] ?? <ProcessResult>[ProcessResult(0, 0, '', '')]);
+      _fakeResults[key] = (value[key] ?? <ProcessResult>[ProcessResult(0, 0, '', '')]).toList();
     }
   }
 
diff --git a/dev/bots/unpublish_package.dart b/dev/bots/unpublish_package.dart
index cd09719..a91ce39 100644
--- a/dev/bots/unpublish_package.dart
+++ b/dev/bots/unpublish_package.dart
@@ -334,7 +334,7 @@
     bool failOk = false,
     bool confirm = false,
   }) async {
-    final List<String> command = <String>['gsutil', '--']..addAll(args);
+    final List<String> command = <String>['gsutil', '--', ...args];
     if (confirm) {
       return _processRunner.runProcess(
         command,
@@ -358,7 +358,7 @@
         print('  $file');
       }
     }
-    await _runGsUtil(<String>['rm']..addAll(files), failOk: true, confirm: confirmed);
+    await _runGsUtil(<String>['rm', ...files], failOk: true, confirm: confirmed);
   }
 
   Future<String> _cloudReplaceDest(String src, String dest) async {
diff --git a/dev/devicelab/bin/tasks/build_mode_test.dart b/dev/devicelab/bin/tasks/build_mode_test.dart
index c152afb..b6a0dfc 100644
--- a/dev/devicelab/bin/tasks/build_mode_test.dart
+++ b/dev/devicelab/bin/tasks/build_mode_test.dart
@@ -17,7 +17,7 @@
   print('run: starting...');
   final Process run = await startProcess(
     path.join(flutterDirectory.path, 'bin', 'flutter'),
-    <String>['run', '--suppress-analytics']..addAll(args),
+    <String>['run', '--suppress-analytics', ...args],
     isBot: false, // we just want to test the output, not have any debugging info
   );
   final List<String> stdout = <String>[];
@@ -61,8 +61,13 @@
     Future<void> checkMode(String mode, {bool releaseExpected = false, bool dynamic = false}) async {
       await inDirectory(appDir, () async {
         print('run: starting $mode test...');
-        final List<String> args = <String>['--$mode']..addAll(dynamic ? <String>['--dynamic'] : const <String>[]);
-        args.addAll(<String>['-d', device.deviceId, 'lib/build_mode.dart']);
+        final List<String> args = <String>[
+          '--$mode',
+          if (dynamic) '--dynamic',
+          '-d',
+          device.deviceId,
+          'lib/build_mode.dart',
+        ];
         final String stdout = await runFlutterAndQuit(args, device);
         if (!stdout.contains('>>> Release: $releaseExpected <<<')) {
           throw "flutter run --$mode ${dynamic ? '--dynamic ' : ''}didn't set kReleaseMode properly";
diff --git a/dev/devicelab/bin/tasks/flutter_run_test.dart b/dev/devicelab/bin/tasks/flutter_run_test.dart
index 940e05b..6106fde 100644
--- a/dev/devicelab/bin/tasks/flutter_run_test.dart
+++ b/dev/devicelab/bin/tasks/flutter_run_test.dart
@@ -40,7 +40,7 @@
   await inDirectory<void>(flutterGalleryDir, () async {
     startProcess(
       path.join(flutterDirectory.path, 'bin', 'flutter'),
-      <String>['run']..addAll(options),
+      <String>['run', ...options],
       environment: null,
     );
     final Completer<void> finished = Completer<void>();
diff --git a/dev/devicelab/bin/tasks/uncaught_image_error_linux.dart b/dev/devicelab/bin/tasks/uncaught_image_error_linux.dart
index 6b9567f..04ca28c 100644
--- a/dev/devicelab/bin/tasks/uncaught_image_error_linux.dart
+++ b/dev/devicelab/bin/tasks/uncaught_image_error_linux.dart
@@ -29,8 +29,9 @@
         deviceId,
       ];
       final Process process = await startProcess(
-          path.join(flutterDirectory.path, 'bin', 'flutter'),
-          <String>['run']..addAll(options));
+        path.join(flutterDirectory.path, 'bin', 'flutter'),
+        <String>['run', ...options],
+      );
 
       final Stream<String> lines = process.stdout
         .transform(utf8.decoder)
diff --git a/dev/devicelab/lib/framework/adb.dart b/dev/devicelab/lib/framework/adb.dart
index 9e4b8f0..e6765c6 100644
--- a/dev/devicelab/lib/framework/adb.dart
+++ b/dev/devicelab/lib/framework/adb.dart
@@ -262,17 +262,17 @@
 
   /// Executes [command] on `adb shell` and returns its exit code.
   Future<void> shellExec(String command, List<String> arguments, { Map<String, String> environment }) async {
-    await adb(<String>['shell', command]..addAll(arguments), environment: environment);
+    await adb(<String>['shell', command, ...arguments], environment: environment);
   }
 
   /// Executes [command] on `adb shell` and returns its standard output as a [String].
   Future<String> shellEval(String command, List<String> arguments, { Map<String, String> environment }) {
-    return adb(<String>['shell', command]..addAll(arguments), environment: environment);
+    return adb(<String>['shell', command, ...arguments], environment: environment);
   }
 
   /// Runs `adb` with the given [arguments], selecting this device.
   Future<String> adb(List<String> arguments, { Map<String, String> environment }) {
-    return eval(adbPath, <String>['-s', deviceId]..addAll(arguments), environment: environment, canFail: false);
+    return eval(adbPath, <String>['-s', deviceId, ...arguments], environment: environment, canFail: false);
   }
 
   @override
diff --git a/dev/devicelab/lib/framework/apk_utils.dart b/dev/devicelab/lib/framework/apk_utils.dart
index d4780f8..bbbfa08 100644
--- a/dev/devicelab/lib/framework/apk_utils.dart
+++ b/dev/devicelab/lib/framework/apk_utils.dart
@@ -194,7 +194,7 @@
   Future<ProcessResult> resultOfFlutterCommand(String command, List<String> options) {
     return Process.run(
       path.join(flutterDirectory.path, 'bin', 'flutter'),
-      <String>[command]..addAll(options),
+      <String>[command, ...options],
       workingDirectory: rootPath,
     );
   }
diff --git a/dev/devicelab/lib/framework/utils.dart b/dev/devicelab/lib/framework/utils.dart
index 42613a3..68ef798 100644
--- a/dev/devicelab/lib/framework/utils.dart
+++ b/dev/devicelab/lib/framework/utils.dart
@@ -235,7 +235,7 @@
   environment ??= <String, String>{};
   environment['BOT'] = isBot ? 'true' : 'false';
   final Process process = await _processManager.start(
-    <String>[executable]..addAll(arguments),
+    <String>[executable, ...arguments],
     environment: environment,
     workingDirectory: workingDirectory ?? cwd,
   );
diff --git a/dev/devicelab/lib/tasks/hot_mode_tests.dart b/dev/devicelab/lib/tasks/hot_mode_tests.dart
index 10fa924..1b245bf 100644
--- a/dev/devicelab/lib/tasks/hot_mode_tests.dart
+++ b/dev/devicelab/lib/tasks/hot_mode_tests.dart
@@ -39,7 +39,7 @@
         {
           final Process process = await startProcess(
               path.join(flutterDirectory.path, 'bin', 'flutter'),
-              <String>['run']..addAll(options),
+              <String>['run', ...options],
               environment: null,
           );
 
@@ -93,7 +93,7 @@
         {
           final Process process = await startProcess(
               path.join(flutterDirectory.path, 'bin', 'flutter'),
-              <String>['run']..addAll(options),
+              <String>['run', ...options],
               environment: null,
           );
           final Completer<void> stdoutDone = Completer<void>();
diff --git a/dev/devicelab/lib/tasks/microbenchmarks.dart b/dev/devicelab/lib/tasks/microbenchmarks.dart
index 2a3153b..2436c76 100644
--- a/dev/devicelab/lib/tasks/microbenchmarks.dart
+++ b/dev/devicelab/lib/tasks/microbenchmarks.dart
@@ -65,7 +65,7 @@
   bool canFail = false,
   Map<String, String> environment,
 }) {
-  final List<String> args = <String>['run']..addAll(options);
+  final List<String> args = <String>['run', ...options];
   return startProcess(path.join(flutterDirectory.path, 'bin', 'flutter'), args, environment: environment);
 }
 
diff --git a/dev/devicelab/lib/tasks/plugin_tests.dart b/dev/devicelab/lib/tasks/plugin_tests.dart
index cc9e7b2..45681da 100644
--- a/dev/devicelab/lib/tasks/plugin_tests.dart
+++ b/dev/devicelab/lib/tasks/plugin_tests.dart
@@ -65,7 +65,7 @@
     await inDirectory(directory, () async {
       await flutter(
         'create',
-        options: <String>['--template=app', '--org', 'io.flutter.devicelab']..addAll(options)..add('plugintest'),
+        options: <String>['--template=app', '--org', 'io.flutter.devicelab', ...options, 'plugintest'],
       );
     });
     return FlutterProject(directory, 'plugintest');
diff --git a/dev/devicelab/lib/tasks/run_without_leak.dart b/dev/devicelab/lib/tasks/run_without_leak.dart
index eb9ff50..b06364a 100644
--- a/dev/devicelab/lib/tasks/run_without_leak.dart
+++ b/dev/devicelab/lib/tasks/run_without_leak.dart
@@ -24,7 +24,7 @@
     await inDirectory<void>(dir, () async {
       final Process process = await startProcess(
           path.join(flutterDirectory.path, 'bin', 'flutter'),
-          <String>['run']..addAll(options),
+          <String>['run', ...options],
           environment: null,
       );
       final Completer<void> stdoutDone = Completer<void>();
diff --git a/dev/devicelab/lib/tasks/web_dev_mode_tests.dart b/dev/devicelab/lib/tasks/web_dev_mode_tests.dart
index cd5685e..dbb5e00 100644
--- a/dev/devicelab/lib/tasks/web_dev_mode_tests.dart
+++ b/dev/devicelab/lib/tasks/web_dev_mode_tests.dart
@@ -37,7 +37,7 @@
           await packagesGet.exitCode;
           final Process process = await startProcess(
               path.join(flutterDirectory.path, 'bin', 'flutter'),
-              <String>['run']..addAll(options),
+              <String>['run', ...options],
               environment: <String, String>{
                 'FLUTTER_WEB': 'true',
               },
@@ -96,7 +96,7 @@
         {
           final Process process = await startProcess(
               path.join(flutterDirectory.path, 'bin', 'flutter'),
-              <String>['run']..addAll(options),
+              <String>['run', ...options],
               environment: <String, String>{
                 'FLUTTER_WEB': 'true',
               },
diff --git a/dev/devicelab/test/run_test.dart b/dev/devicelab/test/run_test.dart
index 7722023..c877e98 100644
--- a/dev/devicelab/test/run_test.dart
+++ b/dev/devicelab/test/run_test.dart
@@ -21,7 +21,7 @@
       }
       final String dart = path.absolute(path.join('..', '..', 'bin', 'cache', 'dart-sdk', 'bin', 'dart'));
       final ProcessResult scriptProcess = processManager.runSync(
-        <String>[dart]..addAll(options)
+        <String>[dart, ...options]
       );
       return scriptProcess;
     }
diff --git a/dev/snippets/lib/snippets.dart b/dev/snippets/lib/snippets.dart
index f4dd8d6..20f5da7 100644
--- a/dev/snippets/lib/snippets.dart
+++ b/dev/snippets/lib/snippets.dart
@@ -175,7 +175,8 @@
     }
     return <_ComponentTuple>[
       _ComponentTuple('description', description),
-    ]..addAll(components);
+      ...components,
+    ];
   }
 
   String _loadFileAsUtf8(File file) {
diff --git a/dev/snippets/pubspec.yaml b/dev/snippets/pubspec.yaml
index 6f8fa69..59d06d6 100644
--- a/dev/snippets/pubspec.yaml
+++ b/dev/snippets/pubspec.yaml
@@ -6,7 +6,7 @@
 
 environment:
   # The pub client defaults to an <2.0.0 sdk constraint which we need to explicitly overwrite.
-  sdk: ">=2.0.0-dev.68.0 <3.0.0"
+  sdk: ">=2.2.2 <3.0.0"
 
 dartdoc:
   # Exclude this package from the hosted API docs (Ironically...).
diff --git a/dev/tools/dartdoc.dart b/dev/tools/dartdoc.dart
index 840a020..774ad3c 100644
--- a/dev/tools/dartdoc.dart
+++ b/dev/tools/dartdoc.dart
@@ -117,7 +117,7 @@
   // Verify which version of dartdoc we're using.
   final ProcessResult result = Process.runSync(
     pubExecutable,
-    <String>[]..addAll(dartdocBaseArgs)..add('--version'),
+    <String>[...dartdocBaseArgs, '--version'],
     workingDirectory: kDocsRoot,
     environment: pubEnvironment,
   );
@@ -137,7 +137,8 @@
   // Generate the documentation.
   // We don't need to exclude flutter_tools in this list because it's not in the
   // recursive dependencies of the package defined at dev/docs/pubspec.yaml
-  final List<String> dartdocArgs = <String>[]..addAll(dartdocBaseArgs)..addAll(<String>[
+  final List<String> dartdocArgs = <String>[
+    ...dartdocBaseArgs,
     '--inject-html',
     '--header', 'styles.html',
     '--header', 'analytics.html',
@@ -145,7 +146,8 @@
     '--header', 'snippets.html',
     '--header', 'opensearch.html',
     '--footer-text', 'lib/footer.html',
-    '--allow-warnings-in-packages', <String>[
+    '--allow-warnings-in-packages',
+    <String>[
       'Flutter',
       'flutter',
       'platform_integration',
@@ -198,7 +200,7 @@
     '--favicon=favicon.ico',
     '--package-order', 'flutter,Dart,platform_integration,flutter_test,flutter_driver',
     '--auto-include-dependencies',
-  ]);
+  ];
 
   String quote(String arg) => arg.contains(' ') ? "'$arg'" : arg;
   print('Executing: (cd $kDocsRoot ; $pubExecutable ${dartdocArgs.map<String>(quote).join(' ')})');
diff --git a/dev/tools/pubspec.yaml b/dev/tools/pubspec.yaml
index b441205..d346ff6 100644
--- a/dev/tools/pubspec.yaml
+++ b/dev/tools/pubspec.yaml
@@ -3,7 +3,7 @@
 
 environment:
   # The pub client defaults to an <2.0.0 sdk constraint which we need to explicitly overwrite.
-  sdk: ">=2.2.0 <3.0.0"
+  sdk: ">=2.2.2 <3.0.0"
 
 dependencies:
   archive: 2.0.10
diff --git a/examples/flutter_gallery/lib/demo/cupertino/cupertino_navigation_demo.dart b/examples/flutter_gallery/lib/demo/cupertino/cupertino_navigation_demo.dart
index 43eb73f..5f842a0 100644
--- a/examples/flutter_gallery/lib/demo/cupertino/cupertino_navigation_demo.dart
+++ b/examples/flutter_gallery/lib/demo/cupertino/cupertino_navigation_demo.dart
@@ -434,7 +434,8 @@
         child: ListView(
           children: <Widget>[
             Tab2Header(),
-          ]..addAll(buildTab2Conversation()),
+            ...buildTab2Conversation(),
+          ],
         ),
       ),
     );
diff --git a/examples/flutter_gallery/lib/demo/pesto_demo.dart b/examples/flutter_gallery/lib/demo/pesto_demo.dart
index f882950..cff30f0 100644
--- a/examples/flutter_gallery/lib/demo/pesto_demo.dart
+++ b/examples/flutter_gallery/lib/demo/pesto_demo.dart
@@ -493,11 +493,9 @@
                   ),
                 ]
               ),
-            ]..addAll(recipe.ingredients.map<TableRow>(
-              (RecipeIngredient ingredient) {
+              ...recipe.ingredients.map<TableRow>((RecipeIngredient ingredient) {
                 return _buildItemRow(ingredient.amount, ingredient.description);
-              }
-            ))..add(
+              }),
               TableRow(
                 children: <Widget>[
                   const SizedBox(),
@@ -506,12 +504,11 @@
                     child: Text('Steps', style: headingStyle),
                   ),
                 ]
-              )
-            )..addAll(recipe.steps.map<TableRow>(
-              (RecipeStep step) {
+              ),
+              ...recipe.steps.map<TableRow>((RecipeStep step) {
                 return _buildItemRow(step.duration ?? '', step.description);
-              }
-            )),
+              }),
+            ],
           ),
         ),
       ),
diff --git a/examples/flutter_gallery/lib/gallery/options.dart b/examples/flutter_gallery/lib/gallery/options.dart
index fb1bb2f..c5642be 100644
--- a/examples/flutter_gallery/lib/gallery/options.dart
+++ b/examples/flutter_gallery/lib/gallery/options.dart
@@ -455,18 +455,14 @@
           const Divider(),
           const _Heading('Platform mechanics'),
           _PlatformItem(options, onOptionsChanged),
-        ]..addAll(
-          _enabledDiagnosticItems(),
-        )..addAll(
-          <Widget>[
-            const Divider(),
-            const _Heading('Flutter gallery'),
-            _ActionItem('About Flutter Gallery', () {
-              showGalleryAboutDialog(context);
-            }),
-            _ActionItem('Send feedback', onSendFeedback),
-          ],
-        ),
+          ..._enabledDiagnosticItems(),
+          const Divider(),
+          const _Heading('Flutter gallery'),
+          _ActionItem('About Flutter Gallery', () {
+            showGalleryAboutDialog(context);
+          }),
+          _ActionItem('Send feedback', onSendFeedback),
+        ],
       ),
     );
   }
diff --git a/examples/flutter_gallery/pubspec.yaml b/examples/flutter_gallery/pubspec.yaml
index d7b0ebd..10f9ac4 100644
--- a/examples/flutter_gallery/pubspec.yaml
+++ b/examples/flutter_gallery/pubspec.yaml
@@ -2,7 +2,7 @@
 
 environment:
   # The pub client defaults to an <2.0.0 sdk constraint which we need to explicitly overwrite.
-  sdk: ">=2.2.0 <3.0.0"
+  sdk: ">=2.2.2 <3.0.0"
 
 dependencies:
   flutter:
diff --git a/packages/flutter/lib/src/rendering/box.dart b/packages/flutter/lib/src/rendering/box.dart
index 5b3babc..99e03b2 100644
--- a/packages/flutter/lib/src/rendering/box.dart
+++ b/packages/flutter/lib/src/rendering/box.dart
@@ -2010,13 +2010,13 @@
           // TODO(jacobr): consider nesting the failures object so it is collapsible.
           throw FlutterError.fromParts(<DiagnosticsNode>[
             ErrorSummary('The intrinsic dimension methods of the $runtimeType class returned values that violate the intrinsic protocol contract.'),
-            ErrorDescription('The following ${failures.length > 1 ? "failures" : "failure"} was detected:') // should this be tagged as an error or not?
-          ]..addAll(failures)
-           ..add(ErrorHint(
+            ErrorDescription('The following ${failures.length > 1 ? "failures" : "failure"} was detected:'), // should this be tagged as an error or not?
+            ...failures,
+            ErrorHint(
               'If you are not writing your own RenderBox subclass, then this is not\n'
               'your fault. Contact support: https://github.com/flutter/flutter/issues/new?template=BUG.md'
-            ))
-          );
+            ),
+          ]);
         }
       }
       return true;
diff --git a/packages/flutter/lib/src/rendering/flex.dart b/packages/flutter/lib/src/rendering/flex.dart
index e2abfe9..2db99f0 100644
--- a/packages/flutter/lib/src/rendering/flex.dart
+++ b/packages/flutter/lib/src/rendering/flex.dart
@@ -708,12 +708,13 @@
               '  http://api.flutter.dev/flutter/rendering/debugDumpRenderTree.html'
             ),
             describeForError('The affected RenderFlex is', style: DiagnosticsTreeStyle.errorProperty),
-            DiagnosticsProperty<dynamic>('The creator information is set to', debugCreator, style: DiagnosticsTreeStyle.errorProperty)
-          ]..addAll(addendum)
-           ..add(ErrorDescription(
-             'If none of the above helps enough to fix this problem, please don\'t hesitate to file a bug:\n'
-             '  https://github.com/flutter/flutter/issues/new?template=BUG.md'
-          )));
+            DiagnosticsProperty<dynamic>('The creator information is set to', debugCreator, style: DiagnosticsTreeStyle.errorProperty),
+            ...addendum,
+            ErrorDescription(
+              'If none of the above helps enough to fix this problem, please don\'t hesitate to file a bug:\n'
+              '  https://github.com/flutter/flutter/issues/new?template=BUG.md'
+            )
+          ]);
         }());
         totalFlex += childParentData.flex;
         lastFlexChild = child;
diff --git a/packages/flutter/lib/src/rendering/sliver.dart b/packages/flutter/lib/src/rendering/sliver.dart
index e8b6b23..f79ca92 100644
--- a/packages/flutter/lib/src/rendering/sliver.dart
+++ b/packages/flutter/lib/src/rendering/sliver.dart
@@ -1204,15 +1204,16 @@
       if (geometry.paintExtent > constraints.remainingPaintExtent) {
         throw FlutterError.fromParts(<DiagnosticsNode>[
           ErrorSummary('SliverGeometry has a paintOffset that exceeds the remainingPaintExtent from the constraints.'),
-          describeForError('The render object whose geometry violates the constraints is the following')
-        ]..addAll(_debugCompareFloats(
+          describeForError('The render object whose geometry violates the constraints is the following'),
+          ..._debugCompareFloats(
             'remainingPaintExtent', constraints.remainingPaintExtent,
             'paintExtent', geometry.paintExtent,
-        ))
-        ..add(ErrorDescription(
-          'The paintExtent must cause the child sliver to paint within the viewport, and so '
-          'cannot exceed the remainingPaintExtent.',
-        )));
+          ),
+          ErrorDescription(
+            'The paintExtent must cause the child sliver to paint within the viewport, and so '
+            'cannot exceed the remainingPaintExtent.',
+          ),
+        ]);
       }
       return true;
     }());
diff --git a/packages/flutter/lib/src/widgets/editable_text.dart b/packages/flutter/lib/src/widgets/editable_text.dart
index b986bb3..b7be8e9 100644
--- a/packages/flutter/lib/src/widgets/editable_text.dart
+++ b/packages/flutter/lib/src/widgets/editable_text.dart
@@ -344,10 +344,10 @@
        _strutStyle = strutStyle,
        keyboardType = keyboardType ?? (maxLines == 1 ? TextInputType.text : TextInputType.multiline),
        inputFormatters = maxLines == 1
-           ? (
-               <TextInputFormatter>[BlacklistingTextInputFormatter.singleLineFormatter]
-                 ..addAll(inputFormatters ?? const Iterable<TextInputFormatter>.empty())
-             )
+           ? <TextInputFormatter>[
+               BlacklistingTextInputFormatter.singleLineFormatter,
+               ...inputFormatters ?? const Iterable<TextInputFormatter>.empty(),
+             ]
            : inputFormatters,
        showCursor = showCursor ?? !readOnly,
        super(key: key);
diff --git a/packages/flutter/test/services/message_codecs_test.dart b/packages/flutter/test/services/message_codecs_test.dart
index c5c3845..c69d0d6 100644
--- a/packages/flutter/test/services/message_codecs_test.dart
+++ b/packages/flutter/test/services/message_codecs_test.dart
@@ -122,22 +122,22 @@
       _checkEncoding<dynamic>(
         standard,
         Uint8List(253),
-        <int>[8, 253]..addAll(List<int>.filled(253, 0)),
+        <int>[8, 253, ...List<int>.filled(253, 0)],
       );
       _checkEncoding<dynamic>(
         standard,
         Uint8List(254),
-        <int>[8, 254, 254, 0]..addAll(List<int>.filled(254, 0)),
+        <int>[8, 254, 254, 0, ...List<int>.filled(254, 0)],
       );
       _checkEncoding<dynamic>(
         standard,
         Uint8List(0xffff),
-        <int>[8, 254, 0xff, 0xff]..addAll(List<int>.filled(0xffff, 0)),
+        <int>[8, 254, 0xff, 0xff, ...List<int>.filled(0xffff, 0)],
       );
       _checkEncoding<dynamic>(
         standard,
         Uint8List(0xffff + 1),
-        <int>[8, 255, 0, 0, 1, 0]..addAll(List<int>.filled(0xffff + 1, 0)),
+        <int>[8, 255, 0, 0, 1, 0, ...List<int>.filled(0xffff + 1, 0)],
       );
     });
     test('should encode and decode simple messages', () {
diff --git a/packages/flutter/test/widgets/scrollable_semantics_test.dart b/packages/flutter/test/widgets/scrollable_semantics_test.dart
index 0f28aa9..5208869 100644
--- a/packages/flutter/test/widgets/scrollable_semantics_test.dart
+++ b/packages/flutter/test/widgets/scrollable_semantics_test.dart
@@ -196,7 +196,8 @@
                       title: Text('App Bar'),
                     ),
                   ),
-                ]..addAll(slivers),
+                  ...slivers,
+                ],
               );
             },
           ),
diff --git a/packages/flutter/test/widgets/scrollbar_test.dart b/packages/flutter/test/widgets/scrollbar_test.dart
index f05994a..b6a85b0 100644
--- a/packages/flutter/test/widgets/scrollbar_test.dart
+++ b/packages/flutter/test/widgets/scrollbar_test.dart
@@ -113,16 +113,17 @@
         scrollMetrics: defaultMetrics,
       );
 
-      final List<ScrollMetrics> metricsList =
-        <ScrollMetrics> [startingMetrics.copyWith(pixels: 0.01)]
-        ..addAll(List<ScrollMetrics>.generate(
-            (maxExtent/viewportDimension).round(),
-            (int index) => startingMetrics.copyWith(pixels: (index + 1) * viewportDimension),
-          ).where((ScrollMetrics metrics) => !metrics.outOfRange))
-        ..add(startingMetrics.copyWith(pixels: maxExtent - 0.01));
+      final List<ScrollMetrics> metricsList = <ScrollMetrics> [
+        startingMetrics.copyWith(pixels: 0.01),
+        ...List<ScrollMetrics>.generate(
+          (maxExtent / viewportDimension).round(),
+          (int index) => startingMetrics.copyWith(pixels: (index + 1) * viewportDimension),
+        ).where((ScrollMetrics metrics) => !metrics.outOfRange),
+        startingMetrics.copyWith(pixels: maxExtent - 0.01),
+      ];
 
       double lastCoefficient;
-      for(ScrollMetrics metrics in metricsList) {
+      for (ScrollMetrics metrics in metricsList) {
         painter.update(metrics, metrics.axisDirection);
         painter.paint(testCanvas, size);
 
diff --git a/packages/flutter/test/widgets/sliver_semantics_test.dart b/packages/flutter/test/widgets/sliver_semantics_test.dart
index 5e6dbdc..c1ef222 100644
--- a/packages/flutter/test/widgets/sliver_semantics_test.dart
+++ b/packages/flutter/test/widgets/sliver_semantics_test.dart
@@ -599,7 +599,8 @@
                   expandedHeight: 100.0,
                   title: Text('AppBar'),
                 ),
-              ]..addAll(slivers),
+                ...slivers,
+              ],
             ),
           ),
         ),
@@ -824,7 +825,8 @@
                   expandedHeight: 100.0,
                   title: Text('AppBar'),
                 ),
-              ]..addAll(slivers),
+                ...slivers,
+              ],
             ),
           ),
         ),
diff --git a/packages/flutter_tools/lib/src/android/android_device.dart b/packages/flutter_tools/lib/src/android/android_device.dart
index 4a5397b..6ebd461 100644
--- a/packages/flutter_tools/lib/src/android/android_device.dart
+++ b/packages/flutter_tools/lib/src/android/android_device.dart
@@ -219,7 +219,7 @@
   _AndroidDevicePortForwarder _portForwarder;
 
   List<String> adbCommandForDevice(List<String> args) {
-    return <String>[getAdbPath(androidSdk), '-s', id]..addAll(args);
+    return <String>[getAdbPath(androidSdk), '-s', id, ...args];
   }
 
   String runAdbCheckedSync(
diff --git a/packages/flutter_tools/lib/src/asset.dart b/packages/flutter_tools/lib/src/asset.dart
index 184ea17..30a734f 100644
--- a/packages/flutter_tools/lib/src/asset.dart
+++ b/packages/flutter_tools/lib/src/asset.dart
@@ -458,7 +458,7 @@
         ));
       } else {
         packageFontAssets.add(FontAsset(
-          Uri(pathSegments: <String>['packages', packageName]..addAll(assetUri.pathSegments)),
+          Uri(pathSegments: <String>['packages', packageName, ...assetUri.pathSegments]),
           weight: fontAsset.weight,
           style: fontAsset.style,
         ));
@@ -677,7 +677,7 @@
     baseDir: assetsBaseDir,
     entryUri: packageName == null
         ? assetUri // Asset from the current application.
-        : Uri(pathSegments: <String>['packages', packageName]..addAll(assetUri.pathSegments)), // Asset from, and declared in $packageName.
+        : Uri(pathSegments: <String>['packages', packageName, ...assetUri.pathSegments]), // Asset from, and declared in $packageName.
     relativeUri: assetUri,
   );
 }
diff --git a/packages/flutter_tools/lib/src/base/build.dart b/packages/flutter_tools/lib/src/base/build.dart
index fb85ba3..8dded97 100644
--- a/packages/flutter_tools/lib/src/base/build.dart
+++ b/packages/flutter_tools/lib/src/base/build.dart
@@ -51,7 +51,8 @@
   }) {
     final List<String> args = <String>[
       '--causal_async_stacks',
-    ]..addAll(additionalArgs);
+      ...additionalArgs,
+    ];
 
     final String snapshotterPath = getSnapshotterPath(snapshotType);
 
@@ -61,7 +62,7 @@
     // architecture.
     if (snapshotType.platform == TargetPlatform.ios) {
       final String hostArch = iosArch == IOSArch.armv7 ? '-i386' : '-x86_64';
-      return runCommandAndStreamOutput(<String>['/usr/bin/arch', hostArch, snapshotterPath]..addAll(args));
+      return runCommandAndStreamOutput(<String>['/usr/bin/arch', hostArch, snapshotterPath, ...args]);
     }
 
     StringConverter outputFilter;
@@ -72,8 +73,7 @@
       outputFilter = (String line) => line != kStripWarning ? line : null;
     }
 
-    return runCommandAndStreamOutput(<String>[snapshotterPath]..addAll(args),
-                                     mapFunction: outputFilter);
+    return runCommandAndStreamOutput(<String>[snapshotterPath, ...args], mapFunction: outputFilter);
   }
 }
 
@@ -168,7 +168,7 @@
     // If inputs and outputs have not changed since last run, skip the build.
     final Fingerprinter fingerprinter = Fingerprinter(
       fingerprintPath: '$depfilePath.fingerprint',
-      paths: <String>[mainPath]..addAll(inputPaths)..addAll(outputPaths),
+      paths: <String>[mainPath, ...inputPaths, ...outputPaths],
       properties: <String, String>{
         'buildMode': buildMode.toString(),
         'targetPlatform': platform.toString(),
@@ -422,7 +422,7 @@
     // If inputs and outputs have not changed since last run, skip the build.
     final Fingerprinter fingerprinter = Fingerprinter(
       fingerprintPath: '$depfilePath.fingerprint',
-      paths: <String>[mainPath]..addAll(inputPaths)..addAll(outputPaths),
+      paths: <String>[mainPath, ...inputPaths, ...outputPaths],
       properties: <String, String>{
         'buildMode': buildMode.toString(),
         'targetPlatform': platform.toString(),
diff --git a/packages/flutter_tools/lib/src/cache.dart b/packages/flutter_tools/lib/src/cache.dart
index 52e1ca7..d310d10 100644
--- a/packages/flutter_tools/lib/src/cache.dart
+++ b/packages/flutter_tools/lib/src/cache.dart
@@ -923,7 +923,7 @@
 
 @visibleForTesting
 String flattenNameSubdirs(Uri url) {
-  final List<String> pieces = <String>[url.host]..addAll(url.pathSegments);
+  final List<String> pieces = <String>[url.host, ...url.pathSegments];
   final Iterable<String> convertedPieces = pieces.map<String>(_flattenNameNoSubdirs);
   return fs.path.joinAll(convertedPieces);
 }
diff --git a/packages/flutter_tools/lib/src/commands/build_aot.dart b/packages/flutter_tools/lib/src/commands/build_aot.dart
index 7dfd45b..4a86582 100644
--- a/packages/flutter_tools/lib/src/commands/build_aot.dart
+++ b/packages/flutter_tools/lib/src/commands/build_aot.dart
@@ -127,10 +127,13 @@
         if ((await Future.wait<int>(exitCodes.values)).every((int buildExitCode) => buildExitCode == 0)) {
           final Iterable<String> dylibs = iosBuilds.values.map<String>((String outputDir) => fs.path.join(outputDir, 'App.framework', 'App'));
           fs.directory(fs.path.join(outputPath, 'App.framework'))..createSync();
-          await runCheckedAsync(<String>['lipo']
-            ..addAll(dylibs)
-            ..addAll(<String>['-create', '-output', fs.path.join(outputPath, 'App.framework', 'App')]),
-          );
+          await runCheckedAsync(<String>[
+            'lipo',
+            ...dylibs,
+            '-create',
+            '-output',
+            fs.path.join(outputPath, 'App.framework', 'App'),
+          ]);
         } else {
           status?.cancel();
           exitCodes.forEach((IOSArch iosArch, Future<int> exitCodeFuture) async {
diff --git a/packages/flutter_tools/lib/src/commands/drive.dart b/packages/flutter_tools/lib/src/commands/drive.dart
index 22232ab..76332c0 100644
--- a/packages/flutter_tools/lib/src/commands/drive.dart
+++ b/packages/flutter_tools/lib/src/commands/drive.dart
@@ -182,7 +182,7 @@
     // if the application is `lib/foo/bar.dart`, the test file is expected to
     // be `test_driver/foo/bar_test.dart`.
     final String pathWithNoExtension = fs.path.withoutExtension(fs.path.joinAll(
-      <String>[packageDir, 'test_driver']..addAll(parts.skip(1))));
+      <String>[packageDir, 'test_driver', ...parts.skip(1)]));
     return '${pathWithNoExtension}_test${fs.path.extension(appFile)}';
   }
 }
@@ -297,13 +297,13 @@
   PackageMap.globalPackagesPath = fs.path.normalize(fs.path.absolute(PackageMap.globalPackagesPath));
   final String dartVmPath = fs.path.join(dartSdkPath, 'bin', 'dart');
   final int result = await runCommandAndStreamOutput(
-    <String>[dartVmPath]
-      ..addAll(dartVmFlags)
-      ..addAll(testArgs)
-      ..addAll(<String>[
-        '--packages=${PackageMap.globalPackagesPath}',
-        '-rexpanded',
-      ]),
+    <String>[
+      dartVmPath,
+      ...dartVmFlags,
+      ...testArgs,
+      '--packages=${PackageMap.globalPackagesPath}',
+      '-rexpanded',
+    ],
     environment: <String, String>{'VM_SERVICE_URL': observatoryUri},
   );
   if (result != 0)
diff --git a/packages/flutter_tools/lib/src/commands/packages.dart b/packages/flutter_tools/lib/src/commands/packages.dart
index 4a3da9f..bb3607a 100644
--- a/packages/flutter_tools/lib/src/commands/packages.dart
+++ b/packages/flutter_tools/lib/src/commands/packages.dart
@@ -163,7 +163,7 @@
 
   @override
   Future<FlutterCommandResult> runCommand() async {
-    await pub(<String>['run', 'test']..addAll(argResults.rest), context: PubContext.runTest, retry: false);
+    await pub(<String>['run', 'test', ...argResults.rest], context: PubContext.runTest, retry: false);
     return null;
   }
 }
@@ -193,7 +193,7 @@
 
   @override
   Future<FlutterCommandResult> runCommand() async {
-    await pub(<String>[_commandName]..addAll(argResults.rest), context: PubContext.pubForward, retry: false);
+    await pub(<String>[_commandName, ...argResults.rest], context: PubContext.pubForward, retry: false);
     return null;
   }
 
diff --git a/packages/flutter_tools/lib/src/dart/pub.dart b/packages/flutter_tools/lib/src/dart/pub.dart
index 7cd554b..ebbb02d 100644
--- a/packages/flutter_tools/lib/src/dart/pub.dart
+++ b/packages/flutter_tools/lib/src/dart/pub.dart
@@ -192,7 +192,7 @@
 
 /// The command used for running pub.
 List<String> _pubCommand(List<String> arguments) {
-  return <String>[ sdkBinaryName('pub') ]..addAll(arguments);
+  return <String>[sdkBinaryName('pub'), ...arguments];
 }
 
 /// The full environment used when running pub.
diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart
index 3377b57..736e237 100644
--- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_kernel_compiler.dart
@@ -84,9 +84,10 @@
     ];
 
     final List<String> command = <String>[
-          artifacts.getArtifactPath(Artifact.engineDartBinary),
-          fuchsiaArtifacts.kernelCompiler.path,
-        ]..addAll(flags);
+      artifacts.getArtifactPath(Artifact.engineDartBinary),
+      fuchsiaArtifacts.kernelCompiler.path,
+      ...flags,
+    ];
     final Process process = await runCommand(command);
     final Status status = logger.startProgress(
       'Building Fuchsia application...',
diff --git a/packages/flutter_tools/lib/src/macos/xcode.dart b/packages/flutter_tools/lib/src/macos/xcode.dart
index 4cb57c7..7cb7d04 100644
--- a/packages/flutter_tools/lib/src/macos/xcode.dart
+++ b/packages/flutter_tools/lib/src/macos/xcode.dart
@@ -90,11 +90,11 @@
   }
 
   Future<RunResult> cc(List<String> args) {
-    return runCheckedAsync(<String>['xcrun', 'cc']..addAll(args));
+    return runCheckedAsync(<String>['xcrun', 'cc', ...args]);
   }
 
   Future<RunResult> clang(List<String> args) {
-    return runCheckedAsync(<String>['xcrun', 'clang']..addAll(args));
+    return runCheckedAsync(<String>['xcrun', 'clang', ...args]);
   }
 
   String getSimulatorPath() {
diff --git a/packages/flutter_tools/test/base/flags_test.dart b/packages/flutter_tools/test/base/flags_test.dart
index e49a7af..0bea2ab 100644
--- a/packages/flutter_tools/test/base/flags_test.dart
+++ b/packages/flutter_tools/test/base/flags_test.dart
@@ -17,7 +17,7 @@
   Cache.disableLocking();
 
   Future<void> runCommand(Iterable<String> flags, _TestMethod testMethod) async {
-    final List<String> args = <String>['test']..addAll(flags);
+    final List<String> args = <String>['test', ...flags];
     final _TestCommand command = _TestCommand(testMethod);
     await createTestCommandRunner(command).run(args);
   }
diff --git a/packages/flutter_tools/test/commands/create_test.dart b/packages/flutter_tools/test/commands/create_test.dart
index 5ea6689..4da6a9c 100644
--- a/packages/flutter_tools/test/commands/create_test.dart
+++ b/packages/flutter_tools/test/commands/create_test.dart
@@ -1169,10 +1169,11 @@
     'flutter_tools.dart',
   ));
 
-  final List<String> args = <String>[]
-    ..addAll(dartVmFlags)
-    ..add(flutterToolsPath)
-    ..add('analyze');
+  final List<String> args = <String>[
+    ...dartVmFlags,
+    flutterToolsPath,
+    'analyze',
+  ];
 
   final ProcessResult exec = await Process.run(
     '$dartSdkPath/bin/dart',
@@ -1196,21 +1197,22 @@
   // files anymore.
   await Process.run(
     '$dartSdkPath/bin/dart',
-    <String>[]
-    ..addAll(dartVmFlags)
-    ..add(flutterToolsPath)
-    ..addAll(<String>['packages', 'get']),
+    <String>[
+      ...dartVmFlags,
+      flutterToolsPath,
+      'packages',
+      'get',
+    ],
     workingDirectory: workingDir.path,
   );
 
-  final List<String> args = <String>[]
-    ..addAll(dartVmFlags)
-    ..add(flutterToolsPath)
-    ..add('test')
-    ..add('--no-color');
-  if (target != null) {
-    args.add(target);
-  }
+  final List<String> args = <String>[
+    ...dartVmFlags,
+    flutterToolsPath,
+    'test',
+    '--no-color',
+    if (target != null) target,
+  ];
 
   final ProcessResult exec = await Process.run(
     '$dartSdkPath/bin/dart',
diff --git a/packages/flutter_tools/test/commands/test_test.dart b/packages/flutter_tools/test/commands/test_test.dart
index 8b7ad9d..e8b5070 100644
--- a/packages/flutter_tools/test/commands/test_test.dart
+++ b/packages/flutter_tools/test/commands/test_test.dart
@@ -172,13 +172,14 @@
   if (!testFile.existsSync())
     fail('missing test file: $testFile');
 
-  final List<String> args = <String>[]
-    ..addAll(dartVmFlags)
-    ..add(fs.path.absolute(fs.path.join('bin', 'flutter_tools.dart')))
-    ..add('test')
-    ..add('--no-color')
-    ..addAll(extraArgs)
-    ..add(testFilePath);
+  final List<String> args = <String>[
+    ...dartVmFlags,
+    fs.path.absolute(fs.path.join('bin', 'flutter_tools.dart')),
+    'test',
+    '--no-color',
+    ...extraArgs,
+    testFilePath
+  ];
 
   while (_testExclusionLock != null)
     await _testExclusionLock;
diff --git a/packages/flutter_tools/test/src/common.dart b/packages/flutter_tools/test/src/common.dart
index 27fe71c..75f95c9 100644
--- a/packages/flutter_tools/test/src/common.dart
+++ b/packages/flutter_tools/test/src/common.dart
@@ -131,7 +131,7 @@
   final String projectPath = fs.path.join(temp.path, 'flutter_project');
   final CreateCommand command = CreateCommand();
   final CommandRunner<void> runner = createTestCommandRunner(command);
-  await runner.run(<String>['create']..addAll(arguments)..add(projectPath));
+  await runner.run(<String>['create', ...arguments, projectPath]);
   return projectPath;
 }