diff --git a/packages/flutter_tools/lib/src/android/android_device.dart b/packages/flutter_tools/lib/src/android/android_device.dart
index b18486f..2c4c48d 100644
--- a/packages/flutter_tools/lib/src/android/android_device.dart
+++ b/packages/flutter_tools/lib/src/android/android_device.dart
@@ -587,12 +587,11 @@
         _timeOrigin = _adbTimestampToDateTime(lastTimestamp);
     else
         _timeOrigin = null;
-    runCommand(device.adbCommandForDevice(args)).then((Process process) {
+    runCommand(device.adbCommandForDevice(args)).then<Null>((Process process) {
       _process = process;
       _process.stdout.transform(UTF8.decoder).transform(const LineSplitter()).listen(_onLine);
       _process.stderr.transform(UTF8.decoder).transform(const LineSplitter()).listen(_onLine);
-
-      _process.exitCode.then((int code) {
+      _process.exitCode.whenComplete(() {
         if (_linesController.hasListener)
           _linesController.close();
       });
diff --git a/packages/flutter_tools/lib/src/base/process.dart b/packages/flutter_tools/lib/src/base/process.dart
index dfed148..9d5a479 100644
--- a/packages/flutter_tools/lib/src/base/process.dart
+++ b/packages/flutter_tools/lib/src/base/process.dart
@@ -110,7 +110,7 @@
 
   // Wait for stdout to be fully processed
   // because process.exitCode may complete first causing flaky tests.
-  await subscription.asFuture();
+  await subscription.asFuture<Null>();
   subscription.cancel();
 
   return await process.exitCode;
diff --git a/packages/flutter_tools/lib/src/base/process_manager.dart b/packages/flutter_tools/lib/src/base/process_manager.dart
index 4ee26f2..c416fe8 100644
--- a/packages/flutter_tools/lib/src/base/process_manager.dart
+++ b/packages/flutter_tools/lib/src/base/process_manager.dart
@@ -410,13 +410,14 @@
     await files.forEach((FileSystemEntity entity) {
       File file = entity;
       Future<dynamic> readAsBytes = file.readAsBytes();
-      addAllFilesToArchive.add(readAsBytes.then((List<int> data) {
+      addAllFilesToArchive.add(readAsBytes.then<Null>((List<int> data) {
         archive.addFile(new ArchiveFile.noCompress(
-          path.basename(file.path), data.length, data));
+          path.basename(file.path), data.length, data)
+        );
       }));
     });
 
-    await Future.wait(addAllFilesToArchive);
+    await Future.wait<dynamic>(addAllFilesToArchive);
     return new ZipEncoder().encode(archive);
   }
 }
diff --git a/packages/flutter_tools/lib/src/cache.dart b/packages/flutter_tools/lib/src/cache.dart
index 680143e..b5dac2d 100644
--- a/packages/flutter_tools/lib/src/cache.dart
+++ b/packages/flutter_tools/lib/src/cache.dart
@@ -232,7 +232,7 @@
 
     return Cache._downloadFileToCache(
       Uri.parse(cache.getVersionFor(kName)), fontsDir, true
-    ).then((_) {
+    ).then<Null>((Null value) {
       cache.setStampFor(kName, cache.getVersionFor(kName));
       status.stop();
     }).whenComplete(() {
@@ -401,7 +401,7 @@
 
   Future<Null> _downloadItem(String message, String url, Directory dest) {
     Status status = logger.startProgress(message);
-    return Cache._downloadFileToCache(Uri.parse(url), dest, true).then((_) {
+    return Cache._downloadFileToCache(Uri.parse(url), dest, true).then<Null>((Null value) {
       status.stop();
     }).whenComplete(() {
       status.cancel();
diff --git a/packages/flutter_tools/lib/src/commands/analyze_continuously.dart b/packages/flutter_tools/lib/src/commands/analyze_continuously.dart
index 0f0dcf9..5a34c93 100644
--- a/packages/flutter_tools/lib/src/commands/analyze_continuously.dart
+++ b/packages/flutter_tools/lib/src/commands/analyze_continuously.dart
@@ -120,7 +120,7 @@
 
       if (firstAnalysis && isBenchmarking) {
         writeBenchmark(analysisTimer, issueCount, -1); // TODO(ianh): track members missing dartdocs instead of saying -1
-        server.dispose().then((_) => exit(issueCount > 0 ? 1 : 0));
+        server.dispose().whenComplete(() { exit(issueCount > 0 ? 1 : 0); });
       }
 
       firstAnalysis = false;
diff --git a/packages/flutter_tools/lib/src/commands/daemon.dart b/packages/flutter_tools/lib/src/commands/daemon.dart
index d32a067..9acadf0 100644
--- a/packages/flutter_tools/lib/src/commands/daemon.dart
+++ b/packages/flutter_tools/lib/src/commands/daemon.dart
@@ -171,7 +171,7 @@
       if (_handlers.containsKey(command))
         return _handlers[command](args);
       throw 'command not understood: $name.$command';
-    }).then((dynamic result) {
+    }).then<Null>((dynamic result) {
       if (result == null) {
         _send(<String, dynamic>{'id': id});
       } else {
@@ -386,7 +386,7 @@
 
     if (options.debuggingEnabled) {
       connectionInfoCompleter = new Completer<DebugConnectionInfo>();
-      connectionInfoCompleter.future.then((DebugConnectionInfo info) {
+      connectionInfoCompleter.future.then<Null>((DebugConnectionInfo info) {
         Map<String, dynamic> params = <String, dynamic>{
           'port': info.httpUri.port,
           'wsUri': info.wsUri.toString(),
@@ -397,7 +397,7 @@
       });
     }
     Completer<Null> appStartedCompleter = new Completer<Null>();
-    appStartedCompleter.future.then((_) {
+    appStartedCompleter.future.then<Null>((Null value) {
       _sendAppEvent(app, 'started');
     });
 
diff --git a/packages/flutter_tools/lib/src/devfs.dart b/packages/flutter_tools/lib/src/devfs.dart
index e741fef..1fcd99a 100644
--- a/packages/flutter_tools/lib/src/devfs.dart
+++ b/packages/flutter_tools/lib/src/devfs.dart
@@ -266,7 +266,7 @@
       Stream<List<int>> contents = content.contentsAsCompressedStream();
       await request.addStream(contents);
       HttpClientResponse response = await request.close();
-      await response.drain();
+      await response.drain<Null>();
     } catch (e) {
       printError('Error writing "$devicePath" to DevFS: $e');
     }
@@ -417,7 +417,10 @@
         if (progressReporter != null) {
           final int max = _pendingOperations.length;
           int complete = 0;
-          _pendingOperations.forEach((Future<dynamic> f) => f.then((dynamic v) {
+          _pendingOperations.forEach((Future<dynamic> f) => f.whenComplete(() {
+            // TODO(ianh): If one of the pending operations fail, we'll keep
+            // calling progressReporter long after update() has completed its
+            // future, assuming that doesn't crash the app.
             complete += 1;
             progressReporter(complete, max);
           }));
diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart
index c89871e..424c495 100644
--- a/packages/flutter_tools/lib/src/ios/devices.dart
+++ b/packages/flutter_tools/lib/src/ios/devices.dart
@@ -402,12 +402,11 @@
   String get name => device.name;
 
   void _start() {
-    runCommand(<String>[device.loggerPath]).then((Process process) {
+    runCommand(<String>[device.loggerPath]).then<Null>((Process process) {
       _process = process;
       _process.stdout.transform(UTF8.decoder).transform(const LineSplitter()).listen(_onLine);
       _process.stderr.transform(UTF8.decoder).transform(const LineSplitter()).listen(_onLine);
-
-      _process.exitCode.then((int code) {
+      _process.exitCode.whenComplete(() {
         if (_linesController.hasListener)
           _linesController.close();
       });
diff --git a/packages/flutter_tools/lib/src/ios/simulators.dart b/packages/flutter_tools/lib/src/ios/simulators.dart
index 1ff1eb4..2b68783 100644
--- a/packages/flutter_tools/lib/src/ios/simulators.dart
+++ b/packages/flutter_tools/lib/src/ios/simulators.dart
@@ -663,7 +663,7 @@
     _systemProcess.stdout.transform(UTF8.decoder).transform(const LineSplitter()).listen(_onSystemLine);
     _systemProcess.stderr.transform(UTF8.decoder).transform(const LineSplitter()).listen(_onSystemLine);
 
-    _deviceProcess.exitCode.then((int code) {
+    _deviceProcess.exitCode.whenComplete(() {
       if (_linesController.hasListener)
         _linesController.close();
     });
diff --git a/packages/flutter_tools/lib/src/test/coverage_collector.dart b/packages/flutter_tools/lib/src/test/coverage_collector.dart
index d0efb52..62e1a94 100644
--- a/packages/flutter_tools/lib/src/test/coverage_collector.dart
+++ b/packages/flutter_tools/lib/src/test/coverage_collector.dart
@@ -35,7 +35,7 @@
 
     int pid = process.pid;
     int exitCode;
-    process.exitCode.then((int code) {
+    process.exitCode.then<Null>((int code) {
       exitCode = code;
     });
 
diff --git a/packages/flutter_tools/lib/src/test/flutter_platform.dart b/packages/flutter_tools/lib/src/test/flutter_platform.dart
index 504b3b5..76a0896 100644
--- a/packages/flutter_tools/lib/src/test/flutter_platform.dart
+++ b/packages/flutter_tools/lib/src/test/flutter_platform.dart
@@ -124,7 +124,7 @@
     bool subprocessActive = false;
     bool controllerSinkClosed = false;
     try {
-      controller.sink.done.then((_) { controllerSinkClosed = true; });
+      controller.sink.done.whenComplete(() { controllerSinkClosed = true; });
 
       // Prepare our WebSocket server to talk to the engine subproces.
       HttpServer server = await HttpServer.bind(_kHost, 0);
@@ -524,10 +524,10 @@
 
   @override
   Future<dynamic> close() {
-   Future.wait(<Future<dynamic>>[
+   Future.wait<dynamic>(<Future<dynamic>>[
       _parent.close(),
       _shellProcessClosed,
-    ]).then(
+    ]).then<Null>(
       (List<dynamic> value) {
         _done.complete();
       },
diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart
index 02c18e0..a8034af 100644
--- a/packages/flutter_tools/lib/src/vmservice.dart
+++ b/packages/flutter_tools/lib/src/vmservice.dart
@@ -561,7 +561,7 @@
   Future<Isolate> getIsolate(String isolateId) {
     if (!loaded) {
       // Trigger a VM load, then get the isolate. Ignore any errors.
-      return load().then((_) => getIsolate(isolateId)).catchError((_) => null);
+      return load().then<Isolate>((ServiceObject serviceObject) => getIsolate(isolateId)).catchError((dynamic error) => null);
     }
     return new Future<Isolate>.value(_isolateCache[isolateId]);
   }
diff --git a/packages/flutter_tools/lib/src/zip.dart b/packages/flutter_tools/lib/src/zip.dart
index 0aae818..788709e 100644
--- a/packages/flutter_tools/lib/src/zip.dart
+++ b/packages/flutter_tools/lib/src/zip.dart
@@ -37,9 +37,9 @@
     final Completer<Null> finished = new Completer<Null>();
     int count = entries.length;
     entries.forEach((String archivePath, DevFSContent content) {
-      content.contentsAsBytes().then((List<int> data) {
+      content.contentsAsBytes().then<Null>((List<int> data) {
         archive.addFile(new ArchiveFile.noCompress(archivePath, data.length, data));
-        --count;
+        count -= 1;
         if (count == 0)
           finished.complete();
       });
@@ -73,11 +73,11 @@
     final Completer<Null> finished = new Completer<Null>();
     int count = entries.length;
     entries.forEach((String archivePath, DevFSContent content) {
-      content.contentsAsBytes().then((List<int> data) {
+      content.contentsAsBytes().then<Null>((List<int> data) {
         File file = fs.file(path.join(zipBuildDir.path, archivePath));
         file.parent.createSync(recursive: true);
-        file.writeAsBytes(data).then((_) {
-          --count;
+        file.writeAsBytes(data).then<Null>((File value) {
+          count -= 1;
           if (count == 0)
             finished.complete();
         });
