indexWhere method

  1. @override
int indexWhere(
  1. bool test(
    1. E element
    ), [
  2. int start = 0
])
override

The first index in the list that satisfies the provided test.

Searches the list from index start to the end of the list. The first time an object o is encountered so that test(o) is true, the index of o is returned.

final notes = <String>['do', 're', 'mi', 're'];
final first = notes.indexWhere((note) => note.startsWith('r')); // 1
final second = notes.indexWhere((note) => note.startsWith('r'), 2); // 3

Returns -1 if element is not found.

final notes = <String>['do', 're', 'mi', 're'];
final index = notes.indexWhere((note) => note.startsWith('k')); // -1

Implementation

@override
int indexWhere(bool Function(E element) test, [int start = 0]) {
  if (start < 0 || start >= _length && _length > 0) {
    return -1;
  }
  _Node<E>? current = _getNodeAt(start);
  for (int i = start; i < _length; i++) {
    if (test(current!.value)) {
      return i;
    }
    current = current.next;
  }
  return -1;
}