diff --git a/analysis_options.yaml b/analysis_options.yaml
index 1bac99a..543ea34 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -44,7 +44,7 @@
   - package_names
   - package_prefixed_library_names
   - prefer_adjacent_string_concatenation
-  # prefer_conditional_assignment
+  - prefer_conditional_assignment
   - prefer_contains
   - prefer_equal_for_default_values
   - prefer_final_fields
diff --git a/lib/src/browser_client.dart b/lib/src/browser_client.dart
index 601a560..602523c 100644
--- a/lib/src/browser_client.dart
+++ b/lib/src/browser_client.dart
@@ -56,7 +56,7 @@
     unawaited(xhr.onLoad.first.then((_) {
       // TODO(nweiz): Set the response type to "arraybuffer" when issue 18542
       // is fixed.
-      var blob = xhr.response == null ? Blob([]) : xhr.response;
+      var blob = xhr.response ?? Blob([]);
       var reader = FileReader();
 
       reader.onLoad.first.then((_) {
diff --git a/lib/src/io_client.dart b/lib/src/io_client.dart
index 64579e7..f38a9c4 100644
--- a/lib/src/io_client.dart
+++ b/lib/src/io_client.dart
@@ -34,8 +34,7 @@
       var ioRequest = (await _inner.openUrl(request.method, request.url))
         ..followRedirects = request.followRedirects
         ..maxRedirects = request.maxRedirects
-        ..contentLength =
-            request.contentLength == null ? -1 : request.contentLength
+        ..contentLength = (request?.contentLength ?? -1)
         ..persistentConnection = request.persistentConnection;
       request.headers.forEach((name, value) {
         ioRequest.headers.set(name, value);
@@ -69,7 +68,9 @@
   /// remains unclosed, the Dart process may not terminate.
   @override
   void close() {
-    if (_inner != null) _inner.close(force: true);
-    _inner = null;
+    if (_inner != null) {
+      _inner.close(force: true);
+      _inner = null;
+    }
   }
 }
diff --git a/lib/src/multipart_file.dart b/lib/src/multipart_file.dart
index 406aafe..4f23c78 100644
--- a/lib/src/multipart_file.dart
+++ b/lib/src/multipart_file.dart
@@ -46,9 +46,8 @@
   MultipartFile(this.field, Stream<List<int>> stream, this.length,
       {this.filename, MediaType contentType})
       : this._stream = toByteStream(stream),
-        this.contentType = contentType != null
-            ? contentType
-            : MediaType('application', 'octet-stream');
+        this.contentType =
+            contentType ?? MediaType('application', 'octet-stream');
 
   /// Creates a new [MultipartFile] from a byte array.
   ///
@@ -69,8 +68,7 @@
   /// the future may be inferred from [filename].
   factory MultipartFile.fromString(String field, String value,
       {String filename, MediaType contentType}) {
-    contentType =
-        contentType == null ? MediaType('text', 'plain') : contentType;
+    contentType ??= MediaType('text', 'plain');
     var encoding = encodingForCharset(contentType.parameters['charset'], utf8);
     contentType = contentType.change(parameters: {'charset': encoding.name});
 
diff --git a/lib/src/multipart_file_io.dart b/lib/src/multipart_file_io.dart
index fb63ab0..a84402f 100644
--- a/lib/src/multipart_file_io.dart
+++ b/lib/src/multipart_file_io.dart
@@ -14,7 +14,7 @@
 
 Future<MultipartFile> multipartFileFromPath(String field, String filePath,
     {String filename, MediaType contentType}) async {
-  if (filename == null) filename = p.basename(filePath);
+  filename ??= p.basename(filePath);
   var file = File(filePath);
   var length = await file.length();
   var stream = ByteStream(DelegatingStream.typed(file.openRead()));
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 67aabe0..c29ad64 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -43,18 +43,15 @@
 /// [charset].
 Encoding encodingForCharset(String charset, [Encoding fallback = latin1]) {
   if (charset == null) return fallback;
-  var encoding = Encoding.getByName(charset);
-  return encoding == null ? fallback : encoding;
+  return Encoding.getByName(charset) ?? fallback;
 }
 
 /// Returns the [Encoding] that corresponds to [charset]. Throws a
 /// [FormatException] if no [Encoding] was found that corresponds to [charset].
 /// [charset] may not be null.
-Encoding requiredEncodingForCharset(String charset) {
-  var encoding = Encoding.getByName(charset);
-  if (encoding != null) return encoding;
-  throw FormatException('Unsupported encoding "$charset".');
-}
+Encoding requiredEncodingForCharset(String charset) =>
+    Encoding.getByName(charset) ??
+    (throw FormatException('Unsupported encoding "$charset".'));
 
 /// A regular expression that matches strings that are composed entirely of
 /// ASCII-compatible characters.
diff --git a/test/io/utils.dart b/test/io/utils.dart
index 8ea8f27..9ab4deb 100644
--- a/test/io/utils.dart
+++ b/test/io/utils.dart
@@ -64,13 +64,10 @@
       }
 
       ByteStream(request).toBytes().then((requestBodyBytes) {
-        var outputEncoding;
         var encodingName = request.uri.queryParameters['response-encoding'];
-        if (encodingName != null) {
-          outputEncoding = requiredEncodingForCharset(encodingName);
-        } else {
-          outputEncoding = ascii;
-        }
+        var outputEncoding = encodingName == null
+            ? ascii
+            : requiredEncodingForCharset(encodingName);
 
         response.headers.contentType =
             ContentType('application', 'json', charset: outputEncoding.name);
@@ -79,8 +76,7 @@
         var requestBody;
         if (requestBodyBytes.isEmpty) {
           requestBody = null;
-        } else if (request.headers.contentType != null &&
-            request.headers.contentType.charset != null) {
+        } else if (request.headers.contentType?.charset != null) {
           var encoding =
               requiredEncodingForCharset(request.headers.contentType.charset);
           requestBody = encoding.decode(requestBodyBytes);
