null_ check_ on_ nullable_ type_ parameter
Don't use null
check on a potentially nullable type parameter.
Details
#DON'T use null
check on a potentially nullable type parameter.
Given a generic type parameter
T
which has a nullable bound (e.g., the default
bound of
Object?
), it is very easy to introduce erroneous
null
checks when
working with a variable of type
T?
. Specifically, it is not uncommon to have
T? x;
and want to assert that
x
has been set to a valid value of type
T
.
A common mistake is to do so using
x!
. This is almost always incorrect, since
if
T
is a nullable type,
x
may validly hold
null
as a value of type
T
.
BAD:
T run<T>(T callback()) {
T? result;
(() { result = callback(); })();
return result!;
}
GOOD:
T run<T>(T callback()) {
T? result;
(() { result = callback(); })();
return result as T;
}
Enable
#
To enable the
null_check_on_nullable_type_parameter
rule, add
null_check_on_nullable_type_parameter
under
linter > rules
in your
analysis_options.yaml
file:
linter:
rules:
- null_check_on_nullable_type_parameter
If you're instead using the YAML map syntax to configure linter rules,
add
null_check_on_nullable_type_parameter: true
under
linter > rules:
linter:
rules:
null_check_on_nullable_type_parameter: true
Unless stated otherwise, the documentation on this site reflects Dart 3.9.2. Report an issue.