replaceFirstWhere method Null safety

T? replaceFirstWhere(
  1. bool test(
    1. T
    ),
  2. {T? value,
  3. T using(
    1. T
    )?,
  4. int start = 0}
)

Replace the first item in the list that satisfies the provided test with the value provided or obtained using the function provided

Searches the list from index start to the end of the list.

Returns the final value of the item replaced or null where the test is not satisfied

var notes = ['do', 're', 'mi', 're'];
var result = notes.replaceFirstWhere(
  (note) => note.startsWith('r'),
  value: 'la',
);
print(result); // la

result = notes.replaceFirstWhere(
  (note) => note.startsWith('r'),
  start: 2,
  using: (note) => note.replaceFirst('r', 'm'),
);
print(result); // me

result = notes.replaceFirstWhere((note) => note.startsWith('d'));
// throws assertion error

Implementation

T? replaceFirstWhere(bool Function(T) test,
    {T? value, T Function(T)? using, int start = 0}) {
  final index = indexWhere(test, start);

  T? replacement;
  if (index != -1) {
    replacement = value ?? (using != null ? using(this[index]) : null);
    assert(
      replacement != null,
      'No replacement value provided '
      'or calculated using the function supplied',
    );
    this[index] = replacement!;
  }

  return replacement;
}