mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-20 19:14:42 +08:00
46
lib/utils/extension/iterable_ext.dart
Normal file
46
lib/utils/extension/iterable_ext.dart
Normal file
@@ -0,0 +1,46 @@
|
||||
extension NullableIterableExt<T> on Iterable<T>? {
|
||||
bool get isNullOrEmpty => this == null || this!.isEmpty;
|
||||
}
|
||||
|
||||
extension IterableExt<T> on Iterable<T> {
|
||||
T? reduceOrNull(T Function(T value, T element) combine) {
|
||||
Iterator<T> iterator = this.iterator;
|
||||
if (!iterator.moveNext()) {
|
||||
return null;
|
||||
}
|
||||
T value = iterator.current;
|
||||
while (iterator.moveNext()) {
|
||||
value = combine(value, iterator.current);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
extension ListExt<T> on List<T> {
|
||||
T? getOrNull(int index) {
|
||||
if (index < 0 || index >= length) {
|
||||
return null;
|
||||
}
|
||||
return this[index];
|
||||
}
|
||||
|
||||
bool removeFirstWhere(bool Function(T) test) {
|
||||
final index = indexWhere(test);
|
||||
if (index != -1) {
|
||||
removeAt(index);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
List<R> fromCast<R>() {
|
||||
return List<R>.from(this);
|
||||
}
|
||||
|
||||
T findClosestTarget(
|
||||
bool Function(T) test,
|
||||
T Function(T, T) combine,
|
||||
) {
|
||||
return where(test).reduceOrNull(combine) ?? reduce(combine);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user