Skip to content

Iterable Extensions

This section provides documentation for extensions on the List and Iterable classes.

of

Get an element at a specific index in a null-safe manner.

dart
final element = myList.of(2);
final element = myList.of(2);

tryRemoveAt

Attempts to remove an element at a given index in a null-safe manner.

dart
myList.tryRemoveAt(1);
myList.tryRemoveAt(1);

indexOfOrNull

Find the index of an element within the list safely without throwing an error if the list is null.

dart
final index = myList.indexOfOrNull(element);
final index = myList.indexOfOrNull(element);

indexWhereOrNull

Find the index of the first element matching the given predicate, returning null if the list is empty.

dart
final index = myList.indexWhereOrNull((item) => item.id == id);
final index = myList.indexWhereOrNull((item) => item.id == id);

tryRemoveWhere

Attempts to remove all elements that satisfy the provided test.

dart
myList.tryRemoveWhere((item) => item.id == id);
myList.tryRemoveWhere((item) => item.id == id);

Common Iterable Extensions

isEmptyOrNull and isNotEmptyOrNull

Properties to check if the iterable is null or empty, and its negation, respectively.

dart
bool isEmpty = collection.isEmptyOrNull;
bool isNotEmpty = collection.isNotEmptyOrNull;
bool isEmpty = collection.isEmptyOrNull;
bool isNotEmpty = collection.isNotEmptyOrNull;

firstOrNull and lastOrNull

Get the first or last element of the iterable, or null if the iterable is empty.

dart
final firstItem = collection.firstOrNull;
final lastItem = collection.lastOrNull;
final firstItem = collection.firstOrNull;
final lastItem = collection.lastOrNull;

firstOrNullWhere

Find the first element satisfying the provided predicate or returns null if no element matches.

dart
final item = collection.firstOrNullWhere((item) => item.id == id);
final item = collection.firstOrNullWhere((item) => item.id == id);

lastOrDefault and firstOrDefault

Get the last or first element of the iterable, or the default value if the iterable is empty.

dart
final lastName = names.lastOrDefault("Doe");
final firstName = names.firstOrDefault("John");
final lastName = names.lastOrDefault("Doe");
final firstName = names.firstOrDefault("John");

concatWithSingleList and concatWithMultipleList

Create a list by concatenating the iterable with another single or multiple iterables.

dart
final allItems = items.concatWithSingleList(otherItems);
final allItems = items.concatWithMultipleList([list1, list2]);
final allItems = items.concatWithSingleList(otherItems);
final allItems = items.concatWithMultipleList([list1, list2]);

toMutableSet

Converts the iterable into a mutable set.

dart
final itemSet = items.toMutableSet();
final itemSet = items.toMutableSet();

groupBy

Groups the elements of the iterable by the keys returned by the provided function.

dart
final groupedItems = items.groupBy((item) => item.category);
final groupedItems = items.groupBy((item) => item.category);

filter and filterNot

Returns a list of elements that satisfy (or don't satisfy) a provided predicate.

dart
final filteredItems = items.filter((item) => item.price > 20);
final excludedItems = items.filterNot((item) => item.isDiscounted);
final filteredItems = items.filter((item) => item.price > 20);
final excludedItems = items.filterNot((item) => item.isDiscounted);

halfLength, takeOnly, and drop

Utilities for manipulating the size and contents of the iterable.

dart
final halfSize = items.halfLength;
final firstItems = items.takeOnly(5);
final remainingItems = items.drop(5);
final halfSize = items.halfLength;
final firstItems = items.takeOnly(5);
final remainingItems = items.drop(5);

sortedDescending, containsAll, and all

Sorting, containment, and predicate-checking utilities.

dart
final sortedItems = items.sortedDescending();
final hasAll = items.containsAll(otherItems);
final allExpensive = items.all((item) => item.price > 100);
final sortedItems = items.sortedDescending();
final hasAll = items.containsAll(otherItems);
final allExpensive = items.all((item) => item.price > 100);

distinctBy

Returns a list of elements with distinct keys derived from a provided predicate.

dart
final distinctAges = people.distinctBy((person) => person.age);
final distinctAges = people.distinctBy((person) => person.age);