In Dart (especially since Dart 2.12 and higher versions introduced null safety), performing null checks is a common and crucial practice that effectively prevents runtime null reference errors. Null checks in Dart primarily rely on the following methods and techniques:
1. Null Safety Type System
Since Dart 2.12, Dart introduced null safety. This means variables are by default non-null. If you want a variable to be assignable to null, you need to explicitly mark it as a nullable type by adding a question mark ? after the type.
Example:
dartint? aNullableInt; // Can be null or an integer int aNonNullableInt; // Cannot be null; must always be an integer
2. Using the ?? Operator
We can use the ?? operator to provide a default value for expressions that might be null. This ensures the result of the expression is never null.
Example:
dartint? possibleNullValue; int safeValue = possibleNullValue ?? 0; // Uses 0 if possibleNullValue is null
3. Conditional Access Operator ?.
When calling a method or accessing a property on an object that might be null, you can use the ?. operator. If the object is null, it won't call the method or access the property, and the entire expression returns null.
Example:
dartclass User { String? name; void printName() { print(name); } } User? user; user?.printName(); // Calls printName() if user is not null
4. Assertion Operator !
When you are certain that an expression is not null but Dart's type inference cannot recognize it, you can use the ! suffix to assert that the expression is non-null.
Example:
dartint? couldBeNullButIsnt = 10; int value = couldBeNullButIsnt!; // Uses ! to assert it's not null
5. Performing Explicit Null Checks Using Functions and Control Flow
In some cases, you may need to perform more complex checks on variables, in which case you can combine if statements to explicitly check for null.
Example:
dartint? input; if (input == null) { print('input is null'); } else { print('input is not null and the value is $input'); }
By using these methods, you can effectively perform null checks in Dart programs to reduce runtime errors and improve code robustness.