use conditional assignment (#9252)

diff --git a/examples/flutter_gallery/lib/gallery/syntax_highlighter.dart b/examples/flutter_gallery/lib/gallery/syntax_highlighter.dart
index a534897..51319ea 100644
--- a/examples/flutter_gallery/lib/gallery/syntax_highlighter.dart
+++ b/examples/flutter_gallery/lib/gallery/syntax_highlighter.dart
@@ -60,9 +60,7 @@
 class DartSyntaxHighlighter extends SyntaxHighlighter {
   DartSyntaxHighlighter([this._style]) {
     _spans = <_HighlightSpan>[];
-
-    if (_style == null)
-      _style = SyntaxHighlighterStyle.darkThemeStyle();
+    _style ??= SyntaxHighlighterStyle.darkThemeStyle();
   }
 
   SyntaxHighlighterStyle _style;
diff --git a/examples/layers/widgets/spinning_mixed.dart b/examples/layers/widgets/spinning_mixed.dart
index 0ffefaf..0e053f1 100644
--- a/examples/layers/widgets/spinning_mixed.dart
+++ b/examples/layers/widgets/spinning_mixed.dart
@@ -78,8 +78,7 @@
 RenderTransform transformBox;
 
 void rotate(Duration timeStamp) {
-  if (timeBase == null)
-    timeBase = timeStamp;
+  timeBase ??= timeStamp;
   final double delta = (timeStamp - timeBase).inMicroseconds.toDouble() / Duration.MICROSECONDS_PER_SECOND; // radians
 
   transformBox.setIdentity();
diff --git a/packages/flutter/lib/src/painting/box_painter.dart b/packages/flutter/lib/src/painting/box_painter.dart
index dc6aa67..db59932 100644
--- a/packages/flutter/lib/src/painting/box_painter.dart
+++ b/packages/flutter/lib/src/painting/box_painter.dart
@@ -577,10 +577,8 @@
   static List<BoxShadow> lerpList(List<BoxShadow> a, List<BoxShadow> b, double t) {
     if (a == null && b == null)
       return null;
-    if (a == null)
-      a = <BoxShadow>[];
-    if (b == null)
-      b = <BoxShadow>[];
+    a ??= <BoxShadow>[];
+    b ??= <BoxShadow>[];
     final List<BoxShadow> result = <BoxShadow>[];
     final int commonLength = math.min(a.length, b.length);
     for (int i = 0; i < commonLength; ++i)
diff --git a/packages/flutter/lib/src/rendering/box.dart b/packages/flutter/lib/src/rendering/box.dart
index 28e2888..dafd827 100644
--- a/packages/flutter/lib/src/rendering/box.dart
+++ b/packages/flutter/lib/src/rendering/box.dart
@@ -1482,8 +1482,7 @@
   @mustCallSuper
   double getDistanceToActualBaseline(TextBaseline baseline) {
     assert(_debugDoingBaseline);
-    if (_cachedBaselines == null)
-      _cachedBaselines = <TextBaseline, double>{};
+    _cachedBaselines ??= <TextBaseline, double>{};
     _cachedBaselines.putIfAbsent(baseline, () => computeDistanceToActualBaseline(baseline));
     return _cachedBaselines[baseline];
   }
diff --git a/packages/flutter/lib/src/rendering/layer.dart b/packages/flutter/lib/src/rendering/layer.dart
index 53b5ac4..3788655 100644
--- a/packages/flutter/lib/src/rendering/layer.dart
+++ b/packages/flutter/lib/src/rendering/layer.dart
@@ -203,8 +203,7 @@
     if (_lastChild != null)
       _lastChild._nextSibling = child;
     _lastChild = child;
-    if (_firstChild == null)
-      _firstChild = child;
+    _firstChild ??= child;
   }
 
   void _remove(Layer child) {
diff --git a/packages/flutter/lib/src/rendering/object.dart b/packages/flutter/lib/src/rendering/object.dart
index 9af6048..b29a204 100644
--- a/packages/flutter/lib/src/rendering/object.dart
+++ b/packages/flutter/lib/src/rendering/object.dart
@@ -2697,8 +2697,7 @@
         _firstChildParentData.previousSibling = child;
       }
       _firstChild = child;
-      if (_lastChild == null)
-        _lastChild = child;
+      _lastChild ??= child;
     } else {
       assert(_firstChild != null);
       assert(_lastChild != null);
diff --git a/packages/flutter/lib/src/scheduler/ticker.dart b/packages/flutter/lib/src/scheduler/ticker.dart
index 82ea376..ea83031 100644
--- a/packages/flutter/lib/src/scheduler/ticker.dart
+++ b/packages/flutter/lib/src/scheduler/ticker.dart
@@ -199,8 +199,7 @@
     assert(scheduled);
     _animationId = null;
 
-    if (_startTime == null)
-      _startTime = timeStamp;
+    _startTime ??= timeStamp;
 
     _onTick(timeStamp - _startTime);
 
diff --git a/packages/flutter/lib/src/widgets/focus_manager.dart b/packages/flutter/lib/src/widgets/focus_manager.dart
index 4bf9d3e..5a197bd 100644
--- a/packages/flutter/lib/src/widgets/focus_manager.dart
+++ b/packages/flutter/lib/src/widgets/focus_manager.dart
@@ -132,8 +132,7 @@
     if (_firstChild != null)
       _firstChild._previousSibling = child;
     _firstChild = child;
-    if (_lastChild == null)
-      _lastChild = child;
+    _lastChild ??= child;
     child._updateManager(_manager);
   }
 
diff --git a/packages/flutter/test/gestures/gesture_binding_test.dart b/packages/flutter/test/gestures/gesture_binding_test.dart
index 9954707..b720151 100644
--- a/packages/flutter/test/gestures/gesture_binding_test.dart
+++ b/packages/flutter/test/gestures/gesture_binding_test.dart
@@ -24,8 +24,7 @@
 TestGestureFlutterBinding _binding = new TestGestureFlutterBinding();
 
 void ensureTestGestureBinding() {
-  if (_binding == null)
-    _binding = new TestGestureFlutterBinding();
+  _binding ??= new TestGestureFlutterBinding();
   assert(GestureBinding.instance != null);
 }
 
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;