add missing type parameter on methods (#22096)

diff --git a/dev/benchmarks/complex_layout/lib/main.dart b/dev/benchmarks/complex_layout/lib/main.dart
index 9b95c74..efae0a2 100644
--- a/dev/benchmarks/complex_layout/lib/main.dart
+++ b/dev/benchmarks/complex_layout/lib/main.dart
@@ -494,7 +494,7 @@
           children: <Widget>[
             Expanded(
               child: TabBarView(
-                children: tabNames.map((String tabName) {
+                children: tabNames.map<Widget>((String tabName) {
                   return Container(
                     key: PageStorageKey<String>(tabName),
                     child: Padding(
diff --git a/dev/bots/analyze.dart b/dev/bots/analyze.dart
index ec41f2c..20b70d9 100644
--- a/dev/bots/analyze.dart
+++ b/dev/bots/analyze.dart
@@ -207,8 +207,8 @@
   final Future<List<List<int>>> savedStderr = process.stderr.toList();
   final int exitCode = await process.exitCode;
   final EvalResult result = EvalResult(
-    stdout: utf8.decode((await savedStdout).expand((List<int> ints) => ints).toList()),
-    stderr: utf8.decode((await savedStderr).expand((List<int> ints) => ints).toList()),
+    stdout: utf8.decode((await savedStdout).expand<int>((List<int> ints) => ints).toList()),
+    stderr: utf8.decode((await savedStderr).expand<int>((List<int> ints) => ints).toList()),
     exitCode: exitCode,
   );
 
@@ -328,13 +328,13 @@
     .whereType<Directory>()
     .map<String>((Directory entity) => path.basename(entity.path))
     .toList()..sort();
-  if (!_matches(packages, directories)) {
+  if (!_matches<String>(packages, directories)) {
     errors.add(
       'flutter/lib/*.dart does not match flutter/lib/src/*/:\n'
       'These are the exported packages:\n' +
-      packages.map((String path) => '  lib/$path.dart').join('\n') +
+      packages.map<String>((String path) => '  lib/$path.dart').join('\n') +
       'These are the directories:\n' +
-      directories.map((String path) => '  lib/src/$path/').join('\n')
+      directories.map<String>((String path) => '  lib/src/$path/').join('\n')
     );
   }
   // Verify that the imports are well-ordered.
@@ -350,7 +350,7 @@
     }
   }
   for (String package in dependencyMap.keys) {
-    final List<String> loop = _deepSearch(dependencyMap, package);
+    final List<String> loop = _deepSearch<String>(dependencyMap, package);
     if (loop != null) {
       errors.add(
         '${yellow}Dependency loop:$reset ' +
@@ -421,7 +421,7 @@
       continue; // we catch these separately
     if (seen != null && seen.contains(key))
       return <T>[start, key];
-    final List<T> result = _deepSearch(
+    final List<T> result = _deepSearch<T>(
       map,
       key,
       (seen == null ? Set<T>.from(<T>[start]) : Set<T>.from(seen))..add(key),
diff --git a/dev/bots/prepare_package.dart b/dev/bots/prepare_package.dart
index b3b8fbb..116018e 100644
--- a/dev/bots/prepare_package.dart
+++ b/dev/bots/prepare_package.dart
@@ -587,7 +587,7 @@
   argParser.addOption(
     'branch',
     defaultsTo: null,
-    allowed: Branch.values.map((Branch branch) => getBranchName(branch)),
+    allowed: Branch.values.map<String>((Branch branch) => getBranchName(branch)),
     help: 'The Flutter branch to build the archive with. Required.',
   );
   argParser.addOption(
diff --git a/dev/bots/run_command.dart b/dev/bots/run_command.dart
index 539192c..0f32200 100644
--- a/dev/bots/run_command.dart
+++ b/dev/bots/run_command.dart
@@ -56,7 +56,7 @@
 
   Future<List<List<int>>> savedStdout, savedStderr;
   if (printOutput) {
-    await Future.wait(<Future<void>>[
+    await Future.wait<void>(<Future<void>>[
       stdout.addStream(process.stdout),
       stderr.addStream(process.stderr)
     ]);
@@ -75,8 +75,8 @@
       print(failureMessage);
     }
     if (!printOutput) {
-      stdout.writeln(utf8.decode((await savedStdout).expand((List<int> ints) => ints).toList()));
-      stderr.writeln(utf8.decode((await savedStderr).expand((List<int> ints) => ints).toList()));
+      stdout.writeln(utf8.decode((await savedStdout).expand<int>((List<int> ints) => ints).toList()));
+      stderr.writeln(utf8.decode((await savedStderr).expand<int>((List<int> ints) => ints).toList()));
     }
     print(
         '$redLine\n'
diff --git a/dev/bots/test/analyze-sample-code_test.dart b/dev/bots/test/analyze-sample-code_test.dart
index 7b50ad7..41ac7c4 100644
--- a/dev/bots/test/analyze-sample-code_test.dart
+++ b/dev/bots/test/analyze-sample-code_test.dart
@@ -13,8 +13,8 @@
       '../../bin/cache/dart-sdk/bin/dart',
       <String>['analyze-sample-code.dart', 'test/analyze-sample-code-test-input'],
     );
-    final List<String> stdout = await process.stdout.transform(utf8.decoder).transform(const LineSplitter()).toList();
-    final List<String> stderr = await process.stderr.transform(utf8.decoder).transform(const LineSplitter()).toList();
+    final List<String> stdout = await process.stdout.transform<String>(utf8.decoder).transform<String>(const LineSplitter()).toList();
+    final List<String> stderr = await process.stderr.transform<String>(utf8.decoder).transform<String>(const LineSplitter()).toList();
     final Match line = RegExp(r'^(.+)/main\.dart:[0-9]+:[0-9]+: .+$').matchAsPrefix(stdout[1]);
     expect(line, isNot(isNull));
     final String directory = line.group(1);
diff --git a/dev/devicelab/bin/tasks/commands_test.dart b/dev/devicelab/bin/tasks/commands_test.dart
index f23f4b8..a1e695d 100644
--- a/dev/devicelab/bin/tasks/commands_test.dart
+++ b/dev/devicelab/bin/tasks/commands_test.dart
@@ -30,8 +30,8 @@
       );
       final StreamController<String> stdout = StreamController<String>.broadcast();
       run.stdout
-        .transform(utf8.decoder)
-        .transform(const LineSplitter())
+        .transform<String>(utf8.decoder)
+        .transform<String>(const LineSplitter())
         .listen((String line) {
           print('run:stdout: $line');
           stdout.add(line);
@@ -46,12 +46,12 @@
           }
         });
       run.stderr
-        .transform(utf8.decoder)
-        .transform(const LineSplitter())
+        .transform<String>(utf8.decoder)
+        .transform<String>(const LineSplitter())
         .listen((String line) {
           stderr.writeln('run:stderr: $line');
         });
-      run.exitCode.then((int exitCode) { ok = false; });
+      run.exitCode.then<void>((int exitCode) { ok = false; });
       await Future.any<dynamic>(<Future<dynamic>>[ ready.future, run.exitCode ]);
       if (!ok)
         throw 'Failed to run test app.';
@@ -114,14 +114,14 @@
       <String>['drive', '--use-existing-app', 'http://127.0.0.1:$vmServicePort/', '--keep-app-running', '--driver', 'test_driver/commands_${name}_test.dart'],
     );
     drive.stdout
-        .transform(utf8.decoder)
-        .transform(const LineSplitter())
+        .transform<String>(utf8.decoder)
+        .transform<String>(const LineSplitter())
         .listen((String line) {
       print('drive:stdout: $line');
     });
     drive.stderr
-        .transform(utf8.decoder)
-        .transform(const LineSplitter())
+        .transform<String>(utf8.decoder)
+        .transform<String>(const LineSplitter())
         .listen((String line) {
       stderr.writeln('drive:stderr: $line');
     });
diff --git a/dev/devicelab/bin/tasks/dartdocs.dart b/dev/devicelab/bin/tasks/dartdocs.dart
index bac9d9b..174ca24 100644
--- a/dev/devicelab/bin/tasks/dartdocs.dart
+++ b/dev/devicelab/bin/tasks/dartdocs.dart
@@ -21,7 +21,7 @@
     int publicMembers = 0;
     int otherErrors = 0;
     int otherLines = 0;
-    await for (String entry in analysis.stdout.transform(utf8.decoder).transform(const LineSplitter())) {
+    await for (String entry in analysis.stdout.transform<String>(utf8.decoder).transform<String>(const LineSplitter())) {
       entry = entry.trim();
       print('analyzer stdout: $entry');
       if (entry == 'Building flutter tool...') {
@@ -36,7 +36,7 @@
         otherLines += 1;
       }
     }
-    await for (String entry in analysis.stderr.transform(utf8.decoder).transform(const LineSplitter())) {
+    await for (String entry in analysis.stderr.transform<String>(utf8.decoder).transform<String>(const LineSplitter())) {
       print('analyzer stderr: $entry');
       if (entry.startsWith('[lint] ')) {
         // ignore this line
diff --git a/dev/devicelab/bin/tasks/flutter_attach_test.dart b/dev/devicelab/bin/tasks/flutter_attach_test.dart
index 3c6641f..f39faf2 100644
--- a/dev/devicelab/bin/tasks/flutter_attach_test.dart
+++ b/dev/devicelab/bin/tasks/flutter_attach_test.dart
@@ -26,8 +26,8 @@
 
   int exitCode;
   process.stdout
-      .transform(utf8.decoder)
-      .transform(const LineSplitter())
+      .transform<String>(utf8.decoder)
+      .transform<String>(const LineSplitter())
       .listen((String line) {
     print('attach:stdout: $line');
     stdout.add(line);
@@ -43,14 +43,14 @@
       finished.complete();
   });
   process.stderr
-      .transform(utf8.decoder)
-      .transform(const LineSplitter())
+      .transform<String>(utf8.decoder)
+      .transform<String>(const LineSplitter())
       .listen((String line) {
     print('run:stderr: $line');
     stdout.add(line);
   });
 
-  process.exitCode.then((int processExitCode) { exitCode = processExitCode; });
+  process.exitCode.then<void>((int processExitCode) { exitCode = processExitCode; });
 
   Future<dynamic> eventOrExit(Future<Null> event) {
     return Future.any<dynamic>(<Future<dynamic>>[ event, process.exitCode ]);
diff --git a/dev/devicelab/bin/tasks/flutter_test_performance.dart b/dev/devicelab/bin/tasks/flutter_test_performance.dart
index 2434680..0e5ef8d 100644
--- a/dev/devicelab/bin/tasks/flutter_test_performance.dart
+++ b/dev/devicelab/bin/tasks/flutter_test_performance.dart
@@ -45,7 +45,7 @@
   );
   int badLines = 0;
   TestStep step = TestStep.starting;
-  await for (String entry in analysis.stdout.transform(utf8.decoder).transform(const LineSplitter())) {
+  await for (String entry in analysis.stdout.transform<String>(utf8.decoder).transform<String>(const LineSplitter())) {
     print('test stdout ($step): $entry');
     if (step == TestStep.starting && entry == 'Building flutter tool...') {
       // ignore this line
@@ -76,7 +76,7 @@
       }
     }
   }
-  await for (String entry in analysis.stderr.transform(utf8.decoder).transform(const LineSplitter())) {
+  await for (String entry in analysis.stderr.transform<String>(utf8.decoder).transform<String>(const LineSplitter())) {
     print('test stderr: $entry');
     badLines += 1;
   }
diff --git a/dev/devicelab/bin/tasks/gradle_plugin_test.dart b/dev/devicelab/bin/tasks/gradle_plugin_test.dart
index 32442d9..8521314 100644
--- a/dev/devicelab/bin/tasks/gradle_plugin_test.dart
+++ b/dev/devicelab/bin/tasks/gradle_plugin_test.dart
@@ -297,7 +297,7 @@
         .replaceAllMapped(_separatorExpr, (Match match) => '${match.group(1)}\n')
         .split('\n')
         // Expand escape sequences, so that '\ ', for example,ß becomes ' '
-        .map((String path) => path.replaceAllMapped(_escapeExpr, (Match match) => match.group(1)).trim())
+        .map<String>((String path) => path.replaceAllMapped(_escapeExpr, (Match match) => match.group(1)).trim())
         .where((String path) => path.isNotEmpty)
         .toSet();
   }
diff --git a/dev/devicelab/bin/tasks/routing_test.dart b/dev/devicelab/bin/tasks/routing_test.dart
index d001aa5..851d9dc 100644
--- a/dev/devicelab/bin/tasks/routing_test.dart
+++ b/dev/devicelab/bin/tasks/routing_test.dart
@@ -37,8 +37,8 @@
         <String>['run', '--verbose', '-d', device.deviceId, '--route', '/smuggle-it', 'lib/route.dart'],
       );
       run.stdout
-        .transform(utf8.decoder)
-        .transform(const LineSplitter())
+        .transform<String>(utf8.decoder)
+        .transform<String>(const LineSplitter())
         .listen((String line) {
           print('run:stdout: $line');
           if (vmServicePort == null) {
@@ -52,12 +52,12 @@
           }
         });
       run.stderr
-        .transform(utf8.decoder)
-        .transform(const LineSplitter())
+        .transform<String>(utf8.decoder)
+        .transform<String>(const LineSplitter())
         .listen((String line) {
           stderr.writeln('run:stderr: $line');
         });
-      run.exitCode.then((int exitCode) { ok = false; });
+      run.exitCode.then<void>((int exitCode) { ok = false; });
       await Future.any<dynamic>(<Future<dynamic>>[ ready.future, run.exitCode ]);
       if (!ok)
         throw 'Failed to run test app.';
@@ -67,14 +67,14 @@
         <String>['drive', '--use-existing-app', 'http://127.0.0.1:$vmServicePort/', '--no-keep-app-running', 'lib/route.dart'],
       );
       drive.stdout
-        .transform(utf8.decoder)
-        .transform(const LineSplitter())
+        .transform<String>(utf8.decoder)
+        .transform<String>(const LineSplitter())
         .listen((String line) {
           print('drive:stdout: $line');
         });
       drive.stderr
-        .transform(utf8.decoder)
-        .transform(const LineSplitter())
+        .transform<String>(utf8.decoder)
+        .transform<String>(const LineSplitter())
         .listen((String line) {
           stderr.writeln('drive:stderr: $line');
         });
diff --git a/dev/devicelab/bin/tasks/run_machine_concurrent_hot_reload.dart b/dev/devicelab/bin/tasks/run_machine_concurrent_hot_reload.dart
index 19d48d3..aa441e5 100644
--- a/dev/devicelab/bin/tasks/run_machine_concurrent_hot_reload.dart
+++ b/dev/devicelab/bin/tasks/run_machine_concurrent_hot_reload.dart
@@ -27,7 +27,7 @@
   }
 
   Stream<String> transformToLines(Stream<List<int>> byteStream) {
-    return byteStream.transform(utf8.decoder).transform(const LineSplitter());
+    return byteStream.transform<String>(utf8.decoder).transform<String>(const LineSplitter());
   }
 
   task(() async {
@@ -74,7 +74,7 @@
       transformToLines(run.stderr).listen((String line) {
         stderr.writeln('run:stderr: $line');
       });
-      run.exitCode.then((int exitCode) {
+      run.exitCode.then<void>((int exitCode) {
         ok = false;
       });
       await Future.any<dynamic>(<Future<dynamic>>[ready.future, run.exitCode]);
diff --git a/dev/devicelab/bin/tasks/run_release_test.dart b/dev/devicelab/bin/tasks/run_release_test.dart
index d3a8851..7ebcb42 100644
--- a/dev/devicelab/bin/tasks/run_release_test.dart
+++ b/dev/devicelab/bin/tasks/run_release_test.dart
@@ -29,8 +29,8 @@
       final List<String> stderr = <String>[];
       int runExitCode;
       run.stdout
-        .transform(utf8.decoder)
-        .transform(const LineSplitter())
+        .transform<String>(utf8.decoder)
+        .transform<String>(const LineSplitter())
         .listen((String line) {
           print('run:stdout: $line');
           stdout.add(line);
@@ -38,13 +38,13 @@
             ready.complete();
         });
       run.stderr
-        .transform(utf8.decoder)
-        .transform(const LineSplitter())
+        .transform<String>(utf8.decoder)
+        .transform<String>(const LineSplitter())
         .listen((String line) {
           print('run:stderr: $line');
           stdout.add(line);
         });
-      run.exitCode.then((int exitCode) { runExitCode = exitCode; });
+      run.exitCode.then<void>((int exitCode) { runExitCode = exitCode; });
       await Future.any<dynamic>(<Future<dynamic>>[ ready.future, run.exitCode ]);
       if (runExitCode != null)
         throw 'Failed to run test app; runner unexpected exited, with exit code $runExitCode.';
diff --git a/dev/devicelab/bin/tasks/service_extensions_test.dart b/dev/devicelab/bin/tasks/service_extensions_test.dart
index dda1676..898d76f 100644
--- a/dev/devicelab/bin/tasks/service_extensions_test.dart
+++ b/dev/devicelab/bin/tasks/service_extensions_test.dart
@@ -29,8 +29,8 @@
         <String>['run', '--verbose', '-d', device.deviceId, 'lib/main.dart'],
       );
       run.stdout
-          .transform(utf8.decoder)
-          .transform(const LineSplitter())
+          .transform<String>(utf8.decoder)
+          .transform<String>(const LineSplitter())
           .listen((String line) {
         print('run:stdout: $line');
         if (vmServicePort == null) {
@@ -44,12 +44,12 @@
         }
       });
       run.stderr
-          .transform(utf8.decoder)
-          .transform(const LineSplitter())
+          .transform<String>(utf8.decoder)
+          .transform<String>(const LineSplitter())
           .listen((String line) {
         stderr.writeln('run:stderr: $line');
       });
-      run.exitCode.then((int exitCode) { ok = false; });
+      run.exitCode.then<void>((int exitCode) { ok = false; });
       await Future.any<dynamic>(<Future<dynamic>>[ ready.future, run.exitCode ]);
       if (!ok)
         throw 'Failed to run test app.';
diff --git a/dev/devicelab/bin/tasks/technical_debt__cost.dart b/dev/devicelab/bin/tasks/technical_debt__cost.dart
index dc2d076..7cc137d 100644
--- a/dev/devicelab/bin/tasks/technical_debt__cost.dart
+++ b/dev/devicelab/bin/tasks/technical_debt__cost.dart
@@ -54,7 +54,7 @@
     workingDirectory: flutterDirectory.path,
   );
   double total = 0.0;
-  await for (String entry in git.stdout.transform(utf8.decoder).transform(const LineSplitter()))
+  await for (String entry in git.stdout.transform<String>(utf8.decoder).transform<String>(const LineSplitter()))
     total += await findCostsForFile(File(path.join(flutterDirectory.path, entry)));
   final int gitExitCode = await git.exitCode;
   if (gitExitCode != 0)
diff --git a/dev/devicelab/lib/framework/adb.dart b/dev/devicelab/lib/framework/adb.dart
index 8098d70..2ea21c8 100644
--- a/dev/devicelab/lib/framework/adb.dart
+++ b/dev/devicelab/lib/framework/adb.dart
@@ -129,7 +129,7 @@
   @override
   Future<Null> chooseWorkingDevice() async {
     final List<Device> allDevices = (await discoverDevices())
-      .map((String id) => AndroidDevice(deviceId: id))
+      .map<Device>((String id) => AndroidDevice(deviceId: id))
       .toList();
 
     if (allDevices.isEmpty)
@@ -298,19 +298,19 @@
         await adb(<String>['logcat', '--clear']);
         final Process process = await startProcess(adbPath, <String>['-s', deviceId, 'logcat']);
         process.stdout
-          .transform(utf8.decoder)
-          .transform(const LineSplitter())
+          .transform<String>(utf8.decoder)
+          .transform<String>(const LineSplitter())
           .listen((String line) {
             print('adb logcat: $line');
             stream.sink.add(line);
           }, onDone: () { stdoutDone.complete(); });
         process.stderr
-          .transform(utf8.decoder)
-          .transform(const LineSplitter())
+          .transform<String>(utf8.decoder)
+          .transform<String>(const LineSplitter())
           .listen((String line) {
             print('adb logcat stderr: $line');
           }, onDone: () { stderrDone.complete(); });
-        process.exitCode.then((int exitCode) {
+        process.exitCode.then<void>((int exitCode) {
           print('adb logcat process terminated with exit code $exitCode');
           if (!aborted) {
             stream.addError(BuildFailedError('adb logcat failed with exit code $exitCode.'));
@@ -374,7 +374,7 @@
   @override
   Future<Null> chooseWorkingDevice() async {
     final List<IosDevice> allDevices = (await discoverDevices())
-      .map((String id) => IosDevice(deviceId: id))
+      .map<IosDevice>((String id) => IosDevice(deviceId: id))
       .toList();
 
     if (allDevices.isEmpty)
@@ -387,7 +387,7 @@
   @override
   Future<List<String>> discoverDevices() async {
     final List<String> iosDeviceIDs = LineSplitter.split(await eval('idevice_id', <String>['-l']))
-      .map((String line) => line.trim())
+      .map<String>((String line) => line.trim())
       .where((String line) => line.isNotEmpty)
       .toList();
     if (iosDeviceIDs.isEmpty)
diff --git a/dev/devicelab/lib/framework/manifest.dart b/dev/devicelab/lib/framework/manifest.dart
index f5e2854..dc0eca3 100644
--- a/dev/devicelab/lib/framework/manifest.dart
+++ b/dev/devicelab/lib/framework/manifest.dart
@@ -83,7 +83,7 @@
 List<ManifestTask> _validateAndParseTasks(dynamic tasksYaml) {
   _checkType(tasksYaml is Map, tasksYaml, 'Value of "tasks"', 'dictionary');
   final List<dynamic> sortedKeys = tasksYaml.keys.toList()..sort();
-  return sortedKeys.map((dynamic taskName) => _validateAndParseTask(taskName, tasksYaml[taskName])).toList();
+  return sortedKeys.map<ManifestTask>((dynamic taskName) => _validateAndParseTask(taskName, tasksYaml[taskName])).toList();
 }
 
 ManifestTask _validateAndParseTask(dynamic taskName, dynamic taskYaml) {
diff --git a/dev/devicelab/lib/framework/runner.dart b/dev/devicelab/lib/framework/runner.dart
index e836d9f..87ad319 100644
--- a/dev/devicelab/lib/framework/runner.dart
+++ b/dev/devicelab/lib/framework/runner.dart
@@ -44,8 +44,8 @@
   final Completer<int> port = Completer<int>();
 
   final StreamSubscription<String> stdoutSub = runner.stdout
-      .transform(const Utf8Decoder())
-      .transform(const LineSplitter())
+      .transform<String>(const Utf8Decoder())
+      .transform<String>(const LineSplitter())
       .listen((String line) {
     if (!port.isCompleted) {
       final int portValue = parseServicePort(line, prefix: 'Observatory listening on ');
@@ -58,8 +58,8 @@
   });
 
   final StreamSubscription<String> stderrSub = runner.stderr
-      .transform(const Utf8Decoder())
-      .transform(const LineSplitter())
+      .transform<String>(const Utf8Decoder())
+      .transform<String>(const LineSplitter())
       .listen((String line) {
     stderr.writeln('[$taskName] [STDERR] $line');
   });
diff --git a/dev/devicelab/lib/framework/utils.dart b/dev/devicelab/lib/framework/utils.dart
index c90adf4..8ec8345 100644
--- a/dev/devicelab/lib/framework/utils.dart
+++ b/dev/devicelab/lib/framework/utils.dart
@@ -172,14 +172,14 @@
     return null;
   }
 
-  return inDirectory(flutterDirectory, () {
+  return inDirectory<String>(flutterDirectory, () {
     return eval('git', <String>['rev-parse', 'HEAD']);
   });
 }
 
 Future<DateTime> getFlutterRepoCommitTimestamp(String commit) {
   // git show -s --format=%at 4b546df7f0b3858aaaa56c4079e5be1ba91fbb65
-  return inDirectory(flutterDirectory, () async {
+  return inDirectory<DateTime>(flutterDirectory, () async {
     final String unixTimestamp = await eval('git', <String>[
       'show',
       '-s',
@@ -235,7 +235,7 @@
   final ProcessInfo processInfo = ProcessInfo(command, process);
   _runningProcesses.add(processInfo);
 
-  process.exitCode.then((int exitCode) {
+  process.exitCode.then<void>((int exitCode) {
     print('"$executable" exit code: $exitCode');
     _runningProcesses.remove(processInfo);
   });
@@ -273,14 +273,14 @@
   final Completer<Null> stdoutDone = Completer<Null>();
   final Completer<Null> stderrDone = Completer<Null>();
   process.stdout
-      .transform(utf8.decoder)
-      .transform(const LineSplitter())
+      .transform<String>(utf8.decoder)
+      .transform<String>(const LineSplitter())
       .listen((String line) {
         print('stdout: $line');
       }, onDone: () { stdoutDone.complete(); });
   process.stderr
-      .transform(utf8.decoder)
-      .transform(const LineSplitter())
+      .transform<String>(utf8.decoder)
+      .transform<String>(const LineSplitter())
       .listen((String line) {
         print('stderr: $line');
       }, onDone: () { stderrDone.complete(); });
@@ -310,15 +310,15 @@
   final Completer<Null> stdoutDone = Completer<Null>();
   final Completer<Null> stderrDone = Completer<Null>();
   process.stdout
-      .transform(utf8.decoder)
-      .transform(const LineSplitter())
+      .transform<String>(utf8.decoder)
+      .transform<String>(const LineSplitter())
       .listen((String line) {
         print('stdout: $line');
         output.writeln(line);
       }, onDone: () { stdoutDone.complete(); });
   process.stderr
-      .transform(utf8.decoder)
-      .transform(const LineSplitter())
+      .transform<String>(utf8.decoder)
+      .transform<String>(const LineSplitter())
       .listen((String line) {
         print('stderr: $line');
       }, onDone: () { stderrDone.complete(); });
@@ -427,11 +427,11 @@
     flutterDirectory.deleteSync(recursive: true);
   }
 
-  await inDirectory(flutterDirectory.parent, () async {
+  await inDirectory<void>(flutterDirectory.parent, () async {
     await exec('git', <String>['clone', 'https://github.com/flutter/flutter.git']);
   });
 
-  await inDirectory(flutterDirectory, () async {
+  await inDirectory<void>(flutterDirectory, () async {
     await exec('git', <String>['checkout', revision]);
   });
 
diff --git a/dev/devicelab/lib/tasks/analysis.dart b/dev/devicelab/lib/tasks/analysis.dart
index 4959358..cbf4366 100644
--- a/dev/devicelab/lib/tasks/analysis.dart
+++ b/dev/devicelab/lib/tasks/analysis.dart
@@ -22,7 +22,7 @@
 Directory get _megaGalleryDirectory => dir(path.join(Directory.systemTemp.path, 'mega_gallery'));
 
 Future<TaskResult> analyzerBenchmarkTask() async {
-  await inDirectory(flutterDirectory, () async {
+  await inDirectory<void>(flutterDirectory, () async {
     rmTree(_megaGalleryDirectory);
     mkdirs(_megaGalleryDirectory);
     await dart(<String>['dev/tools/mega_gallery.dart', '--out=${_megaGalleryDirectory.path}']);
@@ -74,7 +74,7 @@
   Future<double> execute(int iteration, int targetIterations) async {
     section('Analyze $title ${watch ? 'with watcher' : ''} - ${iteration + 1} / $targetIterations');
     final Stopwatch stopwatch = Stopwatch();
-    await inDirectory(directory, () async {
+    await inDirectory<void>(directory, () async {
       stopwatch.start();
       await flutter('analyze', options: options);
       stopwatch.stop();
diff --git a/dev/devicelab/lib/tasks/gallery.dart b/dev/devicelab/lib/tasks/gallery.dart
index 6044e4e..7fdc271 100644
--- a/dev/devicelab/lib/tasks/gallery.dart
+++ b/dev/devicelab/lib/tasks/gallery.dart
@@ -28,7 +28,7 @@
     final String deviceId = device.deviceId;
     final Directory galleryDirectory =
         dir('${flutterDirectory.path}/examples/flutter_gallery');
-    await inDirectory(galleryDirectory, () async {
+    await inDirectory<void>(galleryDirectory, () async {
       await flutter('packages', options: <String>['get']);
 
       if (deviceOperatingSystem == DeviceOperatingSystem.ios)
diff --git a/dev/devicelab/lib/tasks/hot_mode_tests.dart b/dev/devicelab/lib/tasks/hot_mode_tests.dart
index c938318..e24ff66 100644
--- a/dev/devicelab/lib/tasks/hot_mode_tests.dart
+++ b/dev/devicelab/lib/tasks/hot_mode_tests.dart
@@ -29,11 +29,11 @@
     int hotReloadCount = 0;
     Map<String, dynamic> twoReloadsData;
     Map<String, dynamic> freshRestartReloadsData;
-    await inDirectory(flutterDirectory, () async {
+    await inDirectory<void>(flutterDirectory, () async {
       rmTree(_editedFlutterGalleryDir);
       mkdirs(_editedFlutterGalleryDir);
       recursiveCopy(flutterGalleryDir, _editedFlutterGalleryDir);
-      await inDirectory(_editedFlutterGalleryDir, () async {
+      await inDirectory<void>(_editedFlutterGalleryDir, () async {
         if (deviceOperatingSystem == DeviceOperatingSystem.ios)
           await prepareProvisioningCertificates(_editedFlutterGalleryDir.path);
         {
@@ -46,8 +46,8 @@
           final Completer<Null> stdoutDone = Completer<Null>();
           final Completer<Null> stderrDone = Completer<Null>();
           process.stdout
-              .transform(utf8.decoder)
-              .transform(const LineSplitter())
+              .transform<String>(utf8.decoder)
+              .transform<String>(const LineSplitter())
               .listen((String line) {
             if (line.contains('\] Reloaded ')) {
               if (hotReloadCount == 0) {
@@ -72,8 +72,8 @@
             stdoutDone.complete();
           });
           process.stderr
-              .transform(utf8.decoder)
-              .transform(const LineSplitter())
+              .transform<String>(utf8.decoder)
+              .transform<String>(const LineSplitter())
               .listen((String line) {
             print('stderr: $line');
           }, onDone: () {
@@ -99,8 +99,8 @@
           final Completer<Null> stdoutDone = Completer<Null>();
           final Completer<Null> stderrDone = Completer<Null>();
           process.stdout
-              .transform(utf8.decoder)
-              .transform(const LineSplitter())
+              .transform<String>(utf8.decoder)
+              .transform<String>(const LineSplitter())
               .listen((String line) {
             if (line.contains('\] Reloaded ')) {
               process.stdin.writeln('q');
@@ -110,8 +110,8 @@
             stdoutDone.complete();
           });
           process.stderr
-              .transform(utf8.decoder)
-              .transform(const LineSplitter())
+              .transform<String>(utf8.decoder)
+              .transform<String>(const LineSplitter())
               .listen((String line) {
             print('stderr: $line');
           }, onDone: () {
diff --git a/dev/devicelab/lib/tasks/integration_tests.dart b/dev/devicelab/lib/tasks/integration_tests.dart
index 0064c1b..05ec556 100644
--- a/dev/devicelab/lib/tasks/integration_tests.dart
+++ b/dev/devicelab/lib/tasks/integration_tests.dart
@@ -73,7 +73,7 @@
   final List<String> extraOptions;
 
   Future<TaskResult> call() {
-    return inDirectory(testDirectory, () async {
+    return inDirectory<TaskResult>(testDirectory, () async {
       final Device device = await devices.workingDevice;
       await device.unlock();
       final String deviceId = device.deviceId;
diff --git a/dev/devicelab/lib/tasks/integration_ui.dart b/dev/devicelab/lib/tasks/integration_ui.dart
index c40495f..335130f 100644
--- a/dev/devicelab/lib/tasks/integration_ui.dart
+++ b/dev/devicelab/lib/tasks/integration_ui.dart
@@ -15,7 +15,7 @@
   await device.unlock();
   final String deviceId = device.deviceId;
   final Directory testDirectory = dir('${flutterDirectory.path}/dev/integration_tests/ui');
-  await inDirectory(testDirectory, () async {
+  await inDirectory<void>(testDirectory, () async {
     await flutter('packages', options: <String>['get']);
 
     if (deviceOperatingSystem == DeviceOperatingSystem.ios)
diff --git a/dev/devicelab/lib/tasks/microbenchmarks.dart b/dev/devicelab/lib/tasks/microbenchmarks.dart
index ae96483..91892be 100644
--- a/dev/devicelab/lib/tasks/microbenchmarks.dart
+++ b/dev/devicelab/lib/tasks/microbenchmarks.dart
@@ -78,8 +78,8 @@
   final Completer<Map<String, double>> completer = Completer<Map<String, double>>();
 
   final StreamSubscription<String> stderrSub = process.stderr
-      .transform(const Utf8Decoder())
-      .transform(const LineSplitter())
+      .transform<String>(const Utf8Decoder())
+      .transform<String>(const LineSplitter())
       .listen((String line) {
         stderr.writeln('[STDERR] $line');
       });
@@ -87,8 +87,8 @@
   bool processWasKilledIntentionally = false;
   bool resultsHaveBeenParsed = false;
   final StreamSubscription<String> stdoutSub = process.stdout
-      .transform(const Utf8Decoder())
-      .transform(const LineSplitter())
+      .transform<String>(const Utf8Decoder())
+      .transform<String>(const LineSplitter())
       .listen((String line) async {
     print(line);
 
diff --git a/dev/devicelab/lib/tasks/perf_tests.dart b/dev/devicelab/lib/tasks/perf_tests.dart
index 345fd7c..1c09012 100644
--- a/dev/devicelab/lib/tasks/perf_tests.dart
+++ b/dev/devicelab/lib/tasks/perf_tests.dart
@@ -75,7 +75,7 @@
 
     rmTree(sampleDir);
 
-    await inDirectory(Directory.systemTemp, () async {
+    await inDirectory<void>(Directory.systemTemp, () async {
       await flutter('create', options: <String>[sampleAppName]);
     });
 
@@ -95,7 +95,7 @@
   final bool reportMetrics;
 
   Future<TaskResult> run() async {
-    return await inDirectory(testDirectory, () async {
+    return await inDirectory<TaskResult>(testDirectory, () async {
       final String deviceId = (await devices.workingDevice).deviceId;
       await flutter('packages', options: <String>['get']);
 
@@ -131,7 +131,7 @@
   final String timelineFileName;
 
   Future<TaskResult> run() {
-    return inDirectory(testDirectory, () async {
+    return inDirectory<TaskResult>(testDirectory, () async {
       final Device device = await devices.workingDevice;
       await device.unlock();
       final String deviceId = device.deviceId;
@@ -183,7 +183,7 @@
   final bool reportPackageContentSizes;
 
   Future<TaskResult> run() async {
-    return await inDirectory(testDirectory, () async {
+    return await inDirectory<TaskResult>(testDirectory, () async {
       final Device device = await devices.workingDevice;
       await device.unlock();
       await flutter('packages', options: <String>['get']);
@@ -402,7 +402,7 @@
   Device _device;
 
   Future<TaskResult> run() {
-    return inDirectory(project, () async {
+    return inDirectory<TaskResult>(project, () async {
       // This test currently only works on Android, because device.logcat,
       // device.getMemoryStats, etc, aren't implemented for iOS.
 
diff --git a/dev/devicelab/lib/tasks/sample_catalog_generator.dart b/dev/devicelab/lib/tasks/sample_catalog_generator.dart
index ef52a3d..376cc67 100644
--- a/dev/devicelab/lib/tasks/sample_catalog_generator.dart
+++ b/dev/devicelab/lib/tasks/sample_catalog_generator.dart
@@ -18,7 +18,7 @@
   final String deviceId = device.deviceId;
 
   final Directory catalogDirectory = dir('${flutterDirectory.path}/examples/catalog');
-  await inDirectory(catalogDirectory, () async {
+  await inDirectory<void>(catalogDirectory, () async {
     await flutter('packages', options: <String>['get']);
 
     final bool isIosDevice = deviceOperatingSystem == DeviceOperatingSystem.ios;
diff --git a/dev/devicelab/lib/tasks/save_catalog_screenshots.dart b/dev/devicelab/lib/tasks/save_catalog_screenshots.dart
index 727358b..e1bd4d0 100644
--- a/dev/devicelab/lib/tasks/save_catalog_screenshots.dart
+++ b/dev/devicelab/lib/tasks/save_catalog_screenshots.dart
@@ -65,7 +65,7 @@
       } else {
         // TODO(hansmuller): only retry on 5xx and 429 responses
         logMessage('Request to save "$name" (length ${content.length}) failed with status ${response.statusCode}, will retry');
-        logMessage(await response.transform(utf8.decoder).join());
+        logMessage(await response.transform<String>(utf8.decoder).join());
       }
       return response.statusCode == HttpStatus.ok;
     } on TimeoutException catch (_) {
@@ -104,7 +104,7 @@
   while (uploads.any(Upload.isNotComplete)) {
     final HttpClient client = HttpClient();
     uploads = uploads.where(Upload.isNotComplete).toList();
-    await Future.wait(uploads.map((Upload upload) => upload.run(client)));
+    await Future.wait<bool>(uploads.map<Future<bool>>((Upload upload) => upload.run(client)));
     client.close(force: true);
   }
 }
diff --git a/dev/integration_tests/android_semantics_testing/lib/main.dart b/dev/integration_tests/android_semantics_testing/lib/main.dart
index 1b7bf65..d0f5285 100644
--- a/dev/integration_tests/android_semantics_testing/lib/main.dart
+++ b/dev/integration_tests/android_semantics_testing/lib/main.dart
@@ -59,7 +59,7 @@
         builder: (BuildContext context) {
           return Scaffold(
             body: ListView(
-              children: routes.map((String value) {
+              children: routes.map<Widget>((String value) {
                 return MaterialButton(
                   child: Text(value),
                   onPressed: () {
diff --git a/dev/integration_tests/android_views/lib/main.dart b/dev/integration_tests/android_views/lib/main.dart
index e1d0679..a9e79fa 100644
--- a/dev/integration_tests/android_views/lib/main.dart
+++ b/dev/integration_tests/android_views/lib/main.dart
@@ -123,7 +123,7 @@
       final List<dynamic> unTypedRecordedEvents = codec.decodeMessage(data);
       final List<Map<String, dynamic>> recordedEvents = unTypedRecordedEvents
           .cast<Map<dynamic, dynamic>>()
-          .map((Map<dynamic, dynamic> e) =>e.cast<String, dynamic>())
+          .map<Map<String, dynamic>>((Map<dynamic, dynamic> e) =>e.cast<String, dynamic>())
           .toList();
       await channel.invokeMethod('pipeFlutterViewEvents');
       await viewChannel.invokeMethod('pipeTouchEvents');
diff --git a/dev/manual_tests/lib/animated_icons.dart b/dev/manual_tests/lib/animated_icons.dart
index 3cf6f10..b857423 100644
--- a/dev/manual_tests/lib/animated_icons.dart
+++ b/dev/manual_tests/lib/animated_icons.dart
@@ -22,7 +22,7 @@
   @override
   Widget build(BuildContext context) {
     return ListView(
-      children: samples.map((IconSample s) => IconSampleRow(s)).toList(),
+      children: samples.map<IconSampleRow>((IconSample s) => IconSampleRow(s)).toList(),
     );
   }
 }
diff --git a/dev/manual_tests/lib/material_arc.dart b/dev/manual_tests/lib/material_arc.dart
index 5b7fada..4d9ece5 100644
--- a/dev/manual_tests/lib/material_arc.dart
+++ b/dev/manual_tests/lib/material_arc.dart
@@ -452,7 +452,7 @@
         appBar: AppBar(
           title: const Text('Animation'),
           bottom: TabBar(
-            tabs: _allDemos.map((_ArcDemo demo) => Tab(text: demo.title)).toList(),
+            tabs: _allDemos.map<Tab>((_ArcDemo demo) => Tab(text: demo.title)).toList(),
           ),
         ),
         floatingActionButton: Builder(
@@ -466,7 +466,7 @@
           },
         ),
         body: TabBarView(
-          children: _allDemos.map((_ArcDemo demo) => demo.builder(demo)).toList()
+          children: _allDemos.map<Widget>((_ArcDemo demo) => demo.builder(demo)).toList()
         )
       )
     );
diff --git a/dev/manual_tests/lib/page_view.dart b/dev/manual_tests/lib/page_view.dart
index 5487f08..b882f31 100644
--- a/dev/manual_tests/lib/page_view.dart
+++ b/dev/manual_tests/lib/page_view.dart
@@ -119,7 +119,7 @@
 
   Widget _buildBody(BuildContext context) {
     return PageView(
-      children: cardModels.map(buildCard).toList(),
+      children: cardModels.map<Widget>(buildCard).toList(),
       // TODO(abarth): itemsWrap: itemsWrap,
       scrollDirection: scrollDirection,
     );
diff --git a/dev/manual_tests/lib/text.dart b/dev/manual_tests/lib/text.dart
index 938b532..0244f3e 100644
--- a/dev/manual_tests/lib/text.dart
+++ b/dev/manual_tests/lib/text.dart
@@ -189,7 +189,7 @@
     switch (_random.nextInt(10)) {
       case 0:
         if (value == null)
-          return pickFromList(_random, Colors.primaries)[(_random.nextInt(9) + 1) * 100];
+          return pickFromList<MaterialColor>(_random, Colors.primaries)[(_random.nextInt(9) + 1) * 100];
         switch (_random.nextInt(4)) {
           case 0:
             return value.withAlpha(value.alpha + _random.nextInt(10) - 5);
@@ -240,7 +240,7 @@
       case 0:
         return null;
       case 1:
-        return pickFromList(_random, TextDecorationStyle.values);
+        return pickFromList<TextDecorationStyle>(_random, TextDecorationStyle.values);
     }
     return value;
   }
@@ -250,7 +250,7 @@
       case 0:
         return null;
       case 1:
-        return pickFromList(_random, FontWeight.values);
+        return pickFromList<FontWeight>(_random, FontWeight.values);
     }
     return value;
   }
@@ -260,7 +260,7 @@
       case 0:
         return null;
       case 1:
-        return pickFromList(_random, FontStyle.values);
+        return pickFromList<FontStyle>(_random, FontStyle.values);
     }
     return value;
   }
@@ -938,7 +938,7 @@
       if (mounted && intrinsicKey.currentContext.size.height != controlKey.currentContext.size.height) {
         debugPrint('Found some text that unexpectedly renders at different heights.');
         debugPrint('Text: $_text');
-        debugPrint(_text.runes.map((int index) => 'U+' + index.toRadixString(16).padLeft(4, '0')).join(' '));
+        debugPrint(_text.runes.map<String>((int index) => 'U+' + index.toRadixString(16).padLeft(4, '0')).join(' '));
         setState(() {
           _ticker.stop();
         });
@@ -1045,7 +1045,7 @@
                     FlatButton(
                       onPressed: _ticker.isActive ? null : () {
                         print('The currently visible text is: $_text');
-                        print(_text.runes.map((int value) => 'U+${value.toRadixString(16).padLeft(4, '0').toUpperCase()}').join(' '));
+                        print(_text.runes.map<String>((int value) => 'U+${value.toRadixString(16).padLeft(4, '0').toUpperCase()}').join(' '));
                       },
                       child: const Text('DUMP TEXT TO LOGS'),
                     ),
@@ -2109,7 +2109,7 @@
     Range(0x2ceb0, 0x2ebe0),
     Range(0x2f800, 0x2fa1d),
   ];
-  final Range range = pickFromList(random, characterRanges);
+  final Range range = pickFromList<Range>(random, characterRanges);
   if (range.start == range.end)
     return range.start;
   return range.start + random.nextInt(range.end - range.start);
diff --git a/dev/manual_tests/test/card_collection_test.dart b/dev/manual_tests/test/card_collection_test.dart
index 3ed2a1b..8de4efb 100644
--- a/dev/manual_tests/test/card_collection_test.dart
+++ b/dev/manual_tests/test/card_collection_test.dart
@@ -12,7 +12,7 @@
 
 void main() {
   testWidgets('Card Collection smoke test', (WidgetTester tester) async {
-    HttpOverrides.runZoned(() async {
+    HttpOverrides.runZoned<Future<void>>(() async {
       card_collection.main(); // builds the app and schedules a frame but doesn't trigger one
       await tester.pump(); // see https://github.com/flutter/flutter/issues/1865
       await tester.pump(); // triggers a frame
diff --git a/dev/manual_tests/test/color_testing_demo_test.dart b/dev/manual_tests/test/color_testing_demo_test.dart
index 9c3b16e..eca5509 100644
--- a/dev/manual_tests/test/color_testing_demo_test.dart
+++ b/dev/manual_tests/test/color_testing_demo_test.dart
@@ -12,7 +12,7 @@
 
 void main() {
   testWidgets('Color testing demo smoke test', (WidgetTester tester) async {
-    HttpOverrides.runZoned(() async {
+    HttpOverrides.runZoned<Future<void>>(() async {
       color_testing_demo.main(); // builds the app and schedules a frame but doesn't trigger one
       await tester.pump(); // see https://github.com/flutter/flutter/issues/1865
       await tester.pump(); // triggers a frame
diff --git a/dev/tools/dartdoc.dart b/dev/tools/dartdoc.dart
index 20ca85d..cde62e9 100644
--- a/dev/tools/dartdoc.dart
+++ b/dev/tools/dartdoc.dart
@@ -146,7 +146,7 @@
   }
 
   String quote(String arg) => arg.contains(' ') ? "'$arg'" : arg;
-  print('Executing: (cd dev/docs ; $pubExecutable ${dartdocArgs.map(quote).join(' ')})');
+  print('Executing: (cd dev/docs ; $pubExecutable ${dartdocArgs.map<String>(quote).join(' ')})');
 
   process = await Process.start(
     pubExecutable,
@@ -302,7 +302,7 @@
 }
 
 List<String> findPackageNames() {
-  return findPackages().map((FileSystemEntity file) => path.basename(file.path)).toList();
+  return findPackages().map<String>((FileSystemEntity file) => path.basename(file.path)).toList();
 }
 
 /// Finds all packages in the Flutter SDK
@@ -350,8 +350,8 @@
   assert(prefix != null);
   assert(filter != null);
   stream
-    .transform(utf8.decoder)
-    .transform(const LineSplitter())
+    .transform<String>(utf8.decoder)
+    .transform<String>(const LineSplitter())
     .listen((String line) {
       if (!filter.any((Pattern pattern) => line.contains(pattern)))
         print('$prefix$line'.trim());
diff --git a/dev/tools/gen_date_localizations.dart b/dev/tools/gen_date_localizations.dart
index 6a72ced..59c3a42 100644
--- a/dev/tools/gen_date_localizations.dart
+++ b/dev/tools/gen_date_localizations.dart
@@ -135,7 +135,7 @@
   }
 
   if (json is Iterable)
-    return '<dynamic>[${json.map(_jsonToMap).join(',')}]';
+    return '<dynamic>[${json.map<String>(_jsonToMap).join(',')}]';
 
   if (json is Map<String, dynamic>) {
     final StringBuffer buffer = StringBuffer('<String, dynamic>{');
diff --git a/dev/tools/gen_localizations.dart b/dev/tools/gen_localizations.dart
index da4a34c..7419912 100644
--- a/dev/tools/gen_localizations.dart
+++ b/dev/tools/gen_localizations.dart
@@ -202,7 +202,7 @@
 ///
 ///  * [getTranslation], whose documentation describes these values.
 final Set<String> kSupportedLanguages = HashSet<String>.from(const <String>[
-${languageCodes.map((String value) => "  '$value', // ${describeLocale(value)}").toList().join('\n')}
+${languageCodes.map<String>((String value) => "  '$value', // ${describeLocale(value)}").toList().join('\n')}
 ]);
 
 /// Creates a [GlobalMaterialLocalizations] instance for the given `locale`.
diff --git a/dev/tools/lib/roll_dev.dart b/dev/tools/lib/roll_dev.dart
index 143db30..d513ba0 100644
--- a/dev/tools/lib/roll_dev.dart
+++ b/dev/tools/lib/roll_dev.dart
@@ -105,7 +105,7 @@
     exit(1);
   }
 
-  final List<int> parts = match.groups(<int>[1, 2, 3]).map(int.parse).toList();
+  final List<int> parts = match.groups(<int>[1, 2, 3]).map<int>(int.parse).toList();
 
   if (match.group(4) == '0') {
     print('This commit has already been released, as version ${parts.join(".")}.');
diff --git a/dev/tools/localizations_utils.dart b/dev/tools/localizations_utils.dart
index bcfadd5..dfd7a83 100644
--- a/dev/tools/localizations_utils.dart
+++ b/dev/tools/localizations_utils.dart
@@ -29,7 +29,7 @@
 String camelCase(String locale) {
   return locale
     .split('_')
-    .map((String part) => part.substring(0, 1).toUpperCase() + part.substring(1).toLowerCase())
+    .map<String>((String part) => part.substring(0, 1).toUpperCase() + part.substring(1).toLowerCase())
     .join('');
 }
 
@@ -91,7 +91,7 @@
   final HttpClient client = HttpClient();
   final HttpClientRequest request = await client.getUrl(Uri.parse(registry));
   final HttpClientResponse response = await request.close();
-  final String body = (await response.transform(utf8.decoder).toList()).join('');
+  final String body = (await response.transform<String>(utf8.decoder).toList()).join('');
   client.close(force: true);
   final List<Map<String, List<String>>> sections = body.split('%%').skip(1).map<Map<String, List<String>>>(_parseSection).toList();
   for (Map<String, List<String>> section in sections) {
diff --git a/dev/tools/update_icons.dart b/dev/tools/update_icons.dart
index 43a1f79..1984cdf 100644
--- a/dev/tools/update_icons.dart
+++ b/dev/tools/update_icons.dart
@@ -199,9 +199,9 @@
 
 String generateIconDeclarations(String codepointData) {
   return LineSplitter.split(codepointData)
-      .map((String l) => l.trim())
+      .map<String>((String l) => l.trim())
       .where((String l) => l.isNotEmpty)
-      .map(getIconDeclaration)
+      .map<String>(getIconDeclaration)
       .join();
 }
 
diff --git a/dev/tools/vitool/lib/vitool.dart b/dev/tools/vitool/lib/vitool.dart
index f89a93a..0e1ab4e 100644
--- a/dev/tools/vitool/lib/vitool.dart
+++ b/dev/tools/vitool/lib/vitool.dart
@@ -314,7 +314,7 @@
 
   SvgPath applyTransform(_Transform transform) {
     final List<SvgPathCommand> transformedCommands =
-      commands.map((SvgPathCommand c) => c.applyTransform(transform)).toList();
+      commands.map<SvgPathCommand>((SvgPathCommand c) => c.applyTransform(transform)).toList();
     return SvgPath(id, transformedCommands, opacity: opacity * transform.opacity);
   }
 
@@ -400,7 +400,7 @@
   SvgPathCommand build(String type, List<Point<double>> points) {
     List<Point<double>> absPoints = points;
     if (_isRelativeCommand(type)) {
-      absPoints = points.map((Point<double> p) => p + lastPoint).toList();
+      absPoints = points.map<Point<double>>((Point<double> p) => p + lastPoint).toList();
     }
 
     if (type == 'M' || type == 'm')