TIL — `.nonNulls`

From the source code:

  • flutterbincachedart-sdklibcollectioniterable.dart

/// Operations on iterables with nullable elements.


extension NullableIterableExtensions<T extends Object> on Iterable<T?> {

  /// [Returns] The same elements as this iterable,

  /// except that `null` values are omitted.

  Iterable<T> get nonNulls => NonNullsIterable<T>(this);



Source — changelog:

Added extension members:

  • nonNulls
  • firstOrNull
  • lastOrNull
  • singleOrNull
  • elementAtOrNull

Obtained by way of:

The pieces I’m most excited about: | Vennom, u/Vennom

    • Sealed classes (so good for relaying state, especially in MVVM/MVI)
    • Records (tuples)
    • Class modifiers (lock your sub-classing down / support for proper interfaces!!)
    • Pattern matching (Destructing)
    • Added extension members on lists: nonNulls, firstOrNull, lastOrNull, singleOrNull, elementAtOrNull and indexed on Iterables.

Obtained by way of:

Dart 3.0: Best New Features & Why You Should Care | Kyle Venn

Obtained by way of:

All of the references above were due to research stemming from my initial spotting of the `nonNulls` helper method available in the intelliSense dropdown from within a DartPad inside the Dart cheatsheet codelab, where I ended up with the following solution — thanks to that intelliSense suggestion:

String joinWithCommas(int a, [int? b, int? c, int? d, int? e]) {
  // Add all params to List.
  // Remove nulls.
  // Join List with comma.
  return <int?>[a, b, c, d, e].nonNulls.join(‘,’);

Keith D Commiskey

Leave a Reply