Skip to main content

avoid-unnecessary-nullable-fields

effort: 2m
has auto-fix
teams+

Warns when the type of a field is declared nullable, but the field always has a default value and therefore is always non-nullable.

Nullable fields usually require additional checks when using such fields (for example, a separate code branch for a null value). Removing unnecessary nullability can help reduce the number of checks and simplify the code.

info

In cases where you still need to pass a nullable value, consider assigning the default value in the field initializer:

class SomeClass {
final String value;

const SomeClass(String? val) : value = val ?? 'default';
}

Example

❌ Bad:

class SomeClass {
// LINT: Declared field type is unnecessary marked as nullable. Try removing '?'.
final String? value;

const SomeClass({this.value = '1'});

const SomeClass.another({this.value = '2'});
}

class SomeOtherClass {
// LINT: Declared field type is unnecessary marked as nullable. Try removing '?'.
final String? value;

const SomeOtherClass(String val) : value = val;
}

✅ Good:

class SomeClass {
final String? value;

const SomeClass({this.value});
}

class SomeClass {
final String value;

const SomeClass({required this.value});
}

class SomeClass {
final String? value;

const SomeClass({this.value = '1'});

const SomeClass.another({this.value});
}

class SomeClass {
final String? value;

const SomeClass(String? val) : value = val;
}