| // Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| extension ResolveHelper<E> on List<E> { | |
| /// Calls [f] on all elements in the list an returns the resulting list. | |
| /// | |
| /// If all elements returned `null`, `null` is returned. Otherwise a list | |
| /// which for each element is the element returned from [f] or itself if | |
| /// `null`. | |
| List<E>? resolve(E? Function(E) f) { | |
| List<E>? newList; | |
| for (int index = 0; index < this.length; index++) { | |
| E element = this[index]; | |
| E? newElement = f(element); | |
| if (newElement != null) { | |
| newList ??= this.toList(growable: false); | |
| newList[index] = newElement; | |
| } | |
| } | |
| return newList; | |
| } | |
| } |