diff --git a/packages/flutter_tools/lib/src/android/android_workflow.dart b/packages/flutter_tools/lib/src/android/android_workflow.dart
index 8ac011d..f102519 100644
--- a/packages/flutter_tools/lib/src/android/android_workflow.dart
+++ b/packages/flutter_tools/lib/src/android/android_workflow.dart
@@ -4,8 +4,8 @@
 
 import 'dart:async';
 
-import '../base/io.dart';
 import '../base/file_system.dart';
+import '../base/io.dart';
 import '../base/os.dart';
 import '../base/platform.dart';
 import '../base/process.dart';
@@ -50,7 +50,7 @@
         final String javaHomeOutput = runCheckedSync(<String>['/usr/libexec/java_home'], hideStdout: true);
         if (javaHomeOutput != null) {
           final List<String> javaHomeOutputSplit = javaHomeOutput.split('\n');
-          if ((javaHomeOutputSplit != null) && (javaHomeOutputSplit.length > 0)) {
+          if ((javaHomeOutputSplit != null) && (javaHomeOutputSplit.isNotEmpty)) {
             final String javaHome = javaHomeOutputSplit[0].trim();
             return fs.path.join(javaHome, 'bin', 'java');
           }
diff --git a/packages/flutter_tools/lib/src/commands/fuchsia_reload.dart b/packages/flutter_tools/lib/src/commands/fuchsia_reload.dart
index aae488d..dcce29e 100644
--- a/packages/flutter_tools/lib/src/commands/fuchsia_reload.dart
+++ b/packages/flutter_tools/lib/src/commands/fuchsia_reload.dart
@@ -74,7 +74,7 @@
 
     // Find the network ports used on the device by VM service instances.
     final List<int> servicePorts = await _getServicePorts();
-    if (servicePorts.length == 0) {
+    if (servicePorts.isEmpty) {
       throwToolExit("Couldn't find any running Observatory instances.");
     }
     for (int port in servicePorts) {
@@ -85,7 +85,7 @@
     // ports, and find the Isolates that are running the target app.
     final String isolateName = "$_binaryName\$main";
     final List<int> targetPorts = await _filterPorts(servicePorts, isolateName);
-    if (targetPorts.length == 0) {
+    if (targetPorts.isEmpty) {
       throwToolExit("No VMs found running $_binaryName");
     }
     for (int port in targetPorts) {
@@ -110,7 +110,7 @@
 
   // Find ports where there is a view isolate with the given name
   Future<List<int>> _filterPorts(List<int> ports, String isolateFilter) async {
-    final List<int> result = new List<int>();
+    final List<int> result = <int>[];
     for (int port in ports) {
       final String addr = "http://$_address:$port";
       final Uri uri = Uri.parse(addr);
@@ -206,7 +206,7 @@
     final FuchsiaDeviceCommandRunner runner =
         new FuchsiaDeviceCommandRunner(_fuchsiaRoot);
     final List<String> lsOutput = await runner.run("ls /tmp/dart.services");
-    final List<int> ports = new List<int>();
+    final List<int> ports = <int>[];
     for (String s in lsOutput) {
       final String trimmed = s.trim();
       final int lastSpace = trimmed.lastIndexOf(' ');
diff --git a/packages/flutter_tools/lib/src/ios/mac.dart b/packages/flutter_tools/lib/src/ios/mac.dart
index 3c31e07..545fc3b 100644
--- a/packages/flutter_tools/lib/src/ios/mac.dart
+++ b/packages/flutter_tools/lib/src/ios/mac.dart
@@ -8,11 +8,11 @@
 import 'package:meta/meta.dart';
 
 import '../application_package.dart';
-import '../base/context.dart';
 import '../base/common.dart';
+import '../base/context.dart';
 import '../base/file_system.dart';
-import '../base/logger.dart';
 import '../base/io.dart';
+import '../base/logger.dart';
 import '../base/platform.dart';
 import '../base/process.dart';
 import '../base/process_manager.dart';
