Rules / Complexity / prefer-null-aware-operators

prefer-null-aware-operators

lint/complexity/prefer-null-aware-operators
recommended
Same as prefer_null_aware_operators · Dart lints

Flags x == null ? null : x.y (and the inverted x != null ? x.y : null).

Guarding a member access with a null-check ternary is what the ?. null-aware operator does: x?.y. It is shorter and evaluates the receiver only once. The rule fires when one branch is the null literal and the other is a field access, index, or method call whose receiver matches the checked operand (whitespace-insensitive).

Invalid

example.dartdart
void f(C? a, C? b) {
  var r1 = a == null ? null : a.field;
  var r2 = a != null ? a.field : null;
  var r3 = a == null ? null : a.method();
  var r4 = null == a ? null : a.field;
  var r5 = b == null ? null : b.method();
  print('$r1 $r2 $r3 $r4 $r5');
}

class C {
  int? field;
  int method() => 0;
}
Prefer using the null-aware operator '?.'.
1void f(C? a, C? b) {
2 var r1 = a == null ? null : a.field;
Prefer using the null-aware operator '?.'.
2 var r1 = a == null ? null : a.field;
3 var r2 = a != null ? a.field : null;
Prefer using the null-aware operator '?.'.
3 var r2 = a != null ? a.field : null;
4 var r3 = a == null ? null : a.method();
Prefer using the null-aware operator '?.'.
4 var r3 = a == null ? null : a.method();
5 var r4 = null == a ? null : a.field;
Prefer using the null-aware operator '?.'.
5 var r4 = null == a ? null : a.field;
6 var r5 = b == null ? null : b.method();

Valid

example.dartdart
void f(C? a, C? b) {
  var r1 = a == null ? a.field : null;
  var r2 = a == null ? null : b.field;
  var r3 = a != null ? null : a.field;
  var r4 = a == null ? 0 : a.field;
  var r5 = a?.field;
  var r6 = a == null ? null : a;
  print('$r1 $r2 $r3 $r4 $r5 $r6');
}

class C {
  int? field;
  int method() => 0;
}

How to configure

Set the severity of prefer-null-aware-operators in your falcon.json:

falcon.jsonjson
{
  "linter": {
    "rules": {
      "complexity": {
        "prefer-null-aware-operators": "error"
      }
    }
  }
}