diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4ee59cc..e2fc7f8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,8 @@
   and setters with annotations.
 - update `missing_whitespace_between_adjacent_strings` to allow String
   interpolations at the beginning and end of String literals.
+- update `unnecessary_getters_setters` to allow for setters with non-basic
+  assignments (for example, `??=` or `+=`).
 
 # 1.6.1
 
diff --git a/lib/src/ast.dart b/lib/src/ast.dart
index ad5572f..8f1b09a 100644
--- a/lib/src/ast.dart
+++ b/lib/src/ast.dart
@@ -162,11 +162,17 @@
 ///
 /// A simple getter takes one of these basic forms:
 ///
-///     get x => _simpleIdentifier;
+/// ```dart
+/// get x => _simpleIdentifier;
+/// ```
+///
 /// or
-///     get x {
-///       return _simpleIdentifier;
-///     }
+///
+/// ```dart
+/// get x {
+///   return _simpleIdentifier;
+/// }
+/// ```
 bool isSimpleGetter(MethodDeclaration declaration) {
   if (!declaration.isGetter) {
     return false;
@@ -190,14 +196,18 @@
 ///
 /// A simple setter takes this basic form:
 ///
-///     var _x;
-///     set(x) {
-///       _x = x;
-///     }
+/// ```dart
+/// var _x;
+/// set(x) {
+///   _x = x;
+/// }
+/// ```
 ///
 /// or:
 ///
-///     set(x) => _x = x;
+/// ```dart
+/// set(x) => _x = x;
+/// ```
 ///
 /// where the static type of the left and right hand sides must be the same.
 bool isSimpleSetter(MethodDeclaration setter) {
@@ -274,18 +284,20 @@
   if (expression is! AssignmentExpression) {
     return false;
   }
-  var assignment = expression;
+  if (expression.operator.type != TokenType.EQ) {
+    return false;
+  }
 
-  var leftHandSide = assignment.leftHandSide;
-  var rightHandSide = assignment.rightHandSide;
+  var leftHandSide = expression.leftHandSide;
+  var rightHandSide = expression.rightHandSide;
   if (leftHandSide is SimpleIdentifier && rightHandSide is SimpleIdentifier) {
-    var leftElement = assignment.writeElement;
+    var leftElement = expression.writeElement;
     if (leftElement is! PropertyAccessorElement || !leftElement.isSynthetic) {
       return false;
     }
 
     // To guard against setters used as type constraints
-    if (assignment.writeType != rightHandSide.staticType) {
+    if (expression.writeType != rightHandSide.staticType) {
       return false;
     }
 
diff --git a/test_data/rules/unnecessary_getters_setters.dart b/test_data/rules/unnecessary_getters_setters.dart
index 40c59b3..346bade 100644
--- a/test_data/rules/unnecessary_getters_setters.dart
+++ b/test_data/rules/unnecessary_getters_setters.dart
@@ -74,6 +74,14 @@
   }
 }
 
+class Box8 {
+  var _contents;
+  get contents => _contents; //OK (setter uses `??=`)
+  set contents(value) {
+    _contents ??= value;
+  }
+}
+
 class LowerCase {
   var _contents;
   get contents => _contents;
