Mastering Null-aware Operators in Dart: Safely Handling Null Values

Improve code safety and readability by efficiently dealing with null values in your Dart applications.

Improve code safety and readability by efficiently dealing with null values in your Dart applications.

Learn how to effectively handle null values in Dart using null-aware operators, including 

  • null-aware access (?.), 
  • null-aware assignment (??=), 
  • null-aware cascade (..), and 
  • null-aware conditional (??). 

..

Null-aware access operator (?.): 

It is used to access properties or call methods on an object that may be null. If the object is null, the expression returns null without throwing an exception.

class Person {
  String name;
  Person(this.name);
  
  void sayHello() {
    print('Hello, $name!');
  }
}

void main() {
  Person? person; // Nullable Person object
  person?.sayHello(); // This will not throw an exception because of the null-aware access operator
}

..

Null-aware assignment operator (??=): 

This operator assigns a value to a variable only if the variable is currently null. It is a handy way to set default values for nullable variables.

void main() {
  int? num; // Nullable integer
  int defaultValue = 42;
  
  num ??= defaultValue; // Assigns the defaultValue to num only if num is null
  print(num); // Output: 42
  
  num ??= 10; // Since num is not null, it keeps the current value (42)
  print(num); // Output: 42
}

..

Null-aware cascade operator (..): 

It allows chaining multiple method calls on an object while ensuring the object is not null at each step. If the object is null, the cascade operation is skipped.

class Person {
  String name;
  Person(this.name);
  
  void sayHello() {
    print('Hello, $name!');
  }
  
  void introduce() {
    print('I am $name.');
  }
}

void main() {
  Person? person; // Nullable Person object
  
  person?.sayHello(); // This will not throw an exception because of the null-aware access operator
  person?.introduce(); // This will also not throw an exception because of the null-aware access operator
  
  // With the null-aware cascade operator, the chained method calls won't be executed if the object is null
  person?
    ..sayHello()
    ..introduce();
}

..

Null-aware conditional operator (??): 

This operator provides a default value when encountering a null value. It evaluates the expression on its left-hand side and returns it if it's non-null. Otherwise, it returns the expression on its right-hand side.

void main() {
  int? number; // Nullable integer
  int alternativeValue = 10;
  
  int result = number ?? alternativeValue; // If number is null, result will be assigned the value of alternativeValue
  print(result); // Output: 10
  
  number = 5; // Now number is not null
  result = number ?? alternativeValue; // Since number is not null, result will be assigned the value of number
  print(result); // Output: 5
}

..