Rules / Style / avoid-init-to-null

avoid-init-to-null

lint/style/avoid-init-to-null
recommended
Same as avoid_init_to_null · Dart lints

Flags explicit = null initializers on declarations that already default to null.

A non-final, non-const, non-late variable whose type is nullable, absent, or dynamic is already initialized to null, so writing = null adds noise without changing behavior. Drop the initializer and let the default stand. Declarations that are final, const, late, or have a non-nullable type are left alone, since for them the null is either required or meaningful.

Invalid

example.dartdart
int? topLevel = null;
var inferred = null;

class C {
  String? field = null;
  dynamic dyn = null;

  void method() {
    int? local = null;
    var x = null;
    double? a = null, b;
    print('$local $x $a $b');
  }
}
Don't explicitly initialize variables to null.
1int? topLevel = null;
Don't explicitly initialize variables to null.
1int? topLevel = null;
2var inferred = null;
Don't explicitly initialize variables to null.
4class C {
5 String? field = null;
Don't explicitly initialize variables to null.
5 String? field = null;
6 dynamic dyn = null;
Don't explicitly initialize variables to null.
8 void method() {
9 int? local = null;
Don't explicitly initialize variables to null.
9 int? local = null;
10 var x = null;
Don't explicitly initialize variables to null.
10 var x = null;
11 double? a = null, b;

Valid

example.dartdart
int nonNull = 0;
late int? lazy;

class C {
  int? uninitialized;
  final String? name = null;
  const C();
  int count = 0;

  void method(int? param) {
    int? local;
    var x = 42;
    String value = 'hi';
    print('$local $x $value $param');
  }

  void withDefault({int? param = null}) {
    print(param);
  }
}

How to configure

Set the severity of avoid-init-to-null in your falcon.json:

falcon.jsonjson
{
  "linter": {
    "rules": {
      "style": {
        "avoid-init-to-null": "error"
      }
    }
  }
}