?? returns a fallback when the left side is null. ?. only calls the method if the receiver is non-null.

Program

Play the program to fall back to a default and safely read a length.

null_aware.dart
Replay: real traced execution (multi-file project)
void main() {
  String? name;
  var display = name ?? 'default';
  print(display);
  name = 'Ada';
  print(name?.length);
}
  1. name ← null

    1void main() {2  String? name;3  var display = name ?? 'default';
    values this stepnullname
  2. display ← default

    2String? name;3var display = name ?? 'default';4print(display);
    values this stepdefaultdisplaynullname
  3. print(display);

    3var display = name ?? 'default';4print(display);5name = 'Ada';
    outputdefault
    values this stepdefaultdisplay
  4. name ← Ada

    4print(display);5name = 'Ada';6print(name?.length);
    values this stepnull Adaname
  5. print(name?.length);

    5  name = 'Ada';6  print(name?.length);7}
    output3
    values this stepAdaname
?? `a ?? b` is `a` when not null, otherwise `b`.
?. `x?.method()` returns `null` when `x` is null instead of throwing.
safe access Both operators avoid null dereferences without a manual `if`.