use conditional assignment (#9252)

diff --git a/packages/flutter_tools/lib/src/android/android_device.dart b/packages/flutter_tools/lib/src/android/android_device.dart
index 0a08b1b..40ab664 100644
--- a/packages/flutter_tools/lib/src/android/android_device.dart
+++ b/packages/flutter_tools/lib/src/android/android_device.dart
@@ -430,12 +430,7 @@
   }
 
   @override
-  DevicePortForwarder get portForwarder {
-    if (_portForwarder == null)
-      _portForwarder = new _AndroidDevicePortForwarder(this);
-
-    return _portForwarder;
-  }
+  DevicePortForwarder get portForwarder => _portForwarder ??= new _AndroidDevicePortForwarder(this);
 
   static final RegExp _timeRegExp = new RegExp(r'^\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}', multiLine: true);
 
diff --git a/packages/flutter_tools/lib/src/base/os.dart b/packages/flutter_tools/lib/src/base/os.dart
index 65968aa..dc97811 100644
--- a/packages/flutter_tools/lib/src/base/os.dart
+++ b/packages/flutter_tools/lib/src/base/os.dart
@@ -116,8 +116,7 @@
               .trim()} ${results[2].stdout.trim()}";
         }
       }
-      if (_name == null)
-        _name = super.name;
+      _name ??= super.name;
     }
     return _name;
   }
diff --git a/packages/flutter_tools/lib/src/cache.dart b/packages/flutter_tools/lib/src/cache.dart
index 82846c6..a414421 100644
--- a/packages/flutter_tools/lib/src/cache.dart
+++ b/packages/flutter_tools/lib/src/cache.dart
@@ -86,12 +86,7 @@
 
   static String _dartSdkVersion;
 
-  static String get dartSdkVersion {
-    if (_dartSdkVersion == null) {
-      _dartSdkVersion = platform.version;
-    }
-    return _dartSdkVersion;
-  }
+  static String get dartSdkVersion => _dartSdkVersion ??= platform.version;
 
   static String _engineRevision;
 
diff --git a/packages/flutter_tools/lib/src/commands/daemon.dart b/packages/flutter_tools/lib/src/commands/daemon.dart
index 6c7e0eb..16da917 100644
--- a/packages/flutter_tools/lib/src/commands/daemon.dart
+++ b/packages/flutter_tools/lib/src/commands/daemon.dart
@@ -724,8 +724,7 @@
   }
 
   dynamic _runInZone(AppDomain domain, dynamic method()) {
-    if (_logger == null)
-      _logger = new _AppRunLogger(domain, this, logToStdout: logToStdout);
+    _logger ??= new _AppRunLogger(domain, this, logToStdout: logToStdout);
 
     final AppContext appContext = new AppContext();
     appContext.setVariable(Logger, _logger);
diff --git a/packages/flutter_tools/lib/src/dart/pub.dart b/packages/flutter_tools/lib/src/dart/pub.dart
index 8f64421..7cafa18 100644
--- a/packages/flutter_tools/lib/src/dart/pub.dart
+++ b/packages/flutter_tools/lib/src/dart/pub.dart
@@ -34,8 +34,7 @@
   bool offline: false,
   bool checkLastModified: true
 }) async {
-  if (directory == null)
-    directory = fs.currentDirectory.path;
+  directory ??= fs.currentDirectory.path;
 
   final File pubSpecYaml = fs.file(fs.path.join(directory, 'pubspec.yaml'));
   final File dotPackages = fs.file(fs.path.join(directory, '.packages'));
diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart
index c910c2c..6ad3b4b 100644
--- a/packages/flutter_tools/lib/src/device.dart
+++ b/packages/flutter_tools/lib/src/device.dart
@@ -97,8 +97,7 @@
 
   void startPolling() {
     if (_timer == null) {
-      if (_items == null)
-        _items = new ItemListNotifier<Device>();
+      _items ??= new ItemListNotifier<Device>();
       _timer = new Timer.periodic(_pollingDuration, (Timer timer) {
         _items.updateWithNewList(pollingGetDevices());
       });
@@ -112,20 +111,17 @@
 
   @override
   List<Device> get devices {
-    if (_items == null)
-      _items = new ItemListNotifier<Device>.from(pollingGetDevices());
+    _items ??= new ItemListNotifier<Device>.from(pollingGetDevices());
     return _items.items;
   }
 
   Stream<Device> get onAdded {
-    if (_items == null)
-      _items = new ItemListNotifier<Device>();
+    _items ??= new ItemListNotifier<Device>();
     return _items.onAdded;
   }
 
   Stream<Device> get onRemoved {
-    if (_items == null)
-      _items = new ItemListNotifier<Device>();
+    _items ??= new ItemListNotifier<Device>();
     return _items.onRemoved;
   }
 
diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart
index 36291ab..8f642db 100644
--- a/packages/flutter_tools/lib/src/ios/devices.dart
+++ b/packages/flutter_tools/lib/src/ios/devices.dart
@@ -357,12 +357,7 @@
   }
 
   @override
-  DevicePortForwarder get portForwarder {
-    if (_portForwarder == null)
-      _portForwarder = new _IOSDevicePortForwarder(this);
-
-    return _portForwarder;
-  }
+  DevicePortForwarder get portForwarder => _portForwarder ??= new _IOSDevicePortForwarder(this);
 
   @override
   void clearLogs() {
diff --git a/packages/flutter_tools/lib/src/ios/simulators.dart b/packages/flutter_tools/lib/src/ios/simulators.dart
index 75e2129..3ecd761 100644
--- a/packages/flutter_tools/lib/src/ios/simulators.dart
+++ b/packages/flutter_tools/lib/src/ios/simulators.dart
@@ -565,12 +565,7 @@
   }
 
   @override
-  DevicePortForwarder get portForwarder {
-    if (_portForwarder == null)
-      _portForwarder = new _IOSSimulatorDevicePortForwarder(this);
-
-    return _portForwarder;
-  }
+  DevicePortForwarder get portForwarder => _portForwarder ??= new _IOSSimulatorDevicePortForwarder(this);
 
   @override
   void clearLogs() {
diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart
index f7188f9..94ab4bc3 100644
--- a/packages/flutter_tools/lib/src/resident_runner.dart
+++ b/packages/flutter_tools/lib/src/resident_runner.dart
@@ -406,8 +406,7 @@
 /// Given the value of the --target option, return the path of the Dart file
 /// where the app's main function should be.
 String findMainDartFile([String target]) {
-  if (target == null)
-    target = '';
+  target ??= '';
   final String targetPath = fs.path.absolute(target);
   if (fs.isDirectorySync(targetPath))
     return fs.path.join(targetPath, 'lib', 'main.dart');
diff --git a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
index c9c6838..99f74fe 100644
--- a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
+++ b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
@@ -286,8 +286,7 @@
         engineSourcePath = null;
       }
 
-      if (engineSourcePath == null)
-        engineSourcePath = _tryEnginePath(fs.path.join(Cache.flutterRoot, '../engine/src'));
+      engineSourcePath ??= _tryEnginePath(fs.path.join(Cache.flutterRoot, '../engine/src'));
 
       if (engineSourcePath == null) {
         printError('Unable to detect local Flutter engine build directory.\n'
@@ -327,8 +326,7 @@
   }
 
   static void initFlutterRoot() {
-    if (Cache.flutterRoot == null)
-      Cache.flutterRoot = _defaultFlutterRoot;
+    Cache.flutterRoot ??= _defaultFlutterRoot;
   }
 
   /// Get all pub packages in the Flutter repo.
diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart
index bd70231..d9afbfd 100644
--- a/packages/flutter_tools/lib/src/vmservice.dart
+++ b/packages/flutter_tools/lib/src/vmservice.dart
@@ -266,11 +266,9 @@
         serviceObject = new Isolate._empty(owner.vm);
       break;
     }
-    if (serviceObject == null) {
-      // If we don't have a model object for this service object type, as a
-      // fallback return a ServiceMap object.
-      serviceObject = new ServiceMap._empty(owner);
-    }
+    // If we don't have a model object for this service object type, as a
+    // fallback return a ServiceMap object.
+    serviceObject ??= new ServiceMap._empty(owner);
     // We have now constructed an emtpy service object, call update to
     // populate it.
     serviceObject.update(map);
diff --git a/packages/flutter_tools/lib/src/vmservice_record_replay.dart b/packages/flutter_tools/lib/src/vmservice_record_replay.dart
index 2b47e1c..bfde734 100644
--- a/packages/flutter_tools/lib/src/vmservice_record_replay.dart
+++ b/packages/flutter_tools/lib/src/vmservice_record_replay.dart
@@ -43,19 +43,12 @@
 
   @override
   Stream<String> get stream {
-    if (_streamRecorder == null) {
-      _streamRecorder = new _RecordingStream(super.stream, _messages);
-    }
+    _streamRecorder ??= new _RecordingStream(super.stream, _messages);
     return _streamRecorder.stream;
   }
 
   @override
-  StreamSink<String> get sink {
-    if (_sinkRecorder == null) {
-      _sinkRecorder = new _RecordingSink(super.sink, _messages);
-    }
-    return _sinkRecorder;
-  }
+  StreamSink<String> get sink => _sinkRecorder ??= new _RecordingSink(super.sink, _messages);
 }
 
 /// Base class for request and response JSON-rpc messages.
@@ -250,11 +243,7 @@
   }
 
   @override
-  StreamSink<String> get sink {
-    if (_replaySink == null)
-      _replaySink = new _ReplaySink(this);
-    return _replaySink;
-  }
+  StreamSink<String> get sink => _replaySink ??= new _ReplaySink(this);
 
   @override
   Stream<String> get stream => _controller.stream;